2011-11-30 33 views
3

我正在处理用户提交一系列问题的应用程序。这些问题是自由形式的文本,但是基于特定的产品,所以我对上下文有一个大体的了解。我有一个常见问题列表,我需要尝试将用户的问题与FAQ中的问题进行匹配。如何从用户的自然语言查询中选择FAQ条目?

我的语言是Delphi。我的一般思想方法是扔掉小的“垃圾话”,a,an,is,of等等......对这些单词运行一个词干程序以获取根词,然后尝试匹配尽可能多的词尽可能使用其余的单词。

有没有更好的方法?我曾考虑过某种类型的自然语言处理,但恐怕我会考虑多年的发展,而不是一两周。

+1

为什么要限制这个问题到德尔福?看起来像一个普通的CS问题。 –

+2

我宁愿有人不回应......“当我不使用Java时,这个Java库会这样做......”。 – user1009073

+0

你仍然在问一个与实现相对的方法,但我认为它可能会导致很多C实现的链接。所以,点了。 –

回答

4

不知道这是否解决方案是你要找的正是,但如果你正在寻找解析自然语言,你可以使用链接的文法分析。谢谢,我翻译了这个与德尔福一起使用(完整的演示),你可以下载(免费和100%开源)from this page on my blog

3

除了您所产生的方法,我建议你将需要寻找到一个或多个以下的:

  • 认识到重要的对或词组(2个或更多的话)。例如,如果你的域是一个技术领域,一对应该被自动视为一对而不是单个单词的重要对,其中这对单词意味着特殊的东西(在编程中,“链接列表”,“串行端口”等等,作为一对单词而言,它们的意义比单独的意义更重要)。

  • 同义词的大名单( “转==旋转”, “开放==访问”,等等)。

我会试图用它写入的任何语言撕开“搜索引擎”开源软件,看看他们使用什么通用技术。

5

你并不需要创造这样一个新的方式。这一切都是以前完成的。你需要什么是所谓的FAQ取景,由哈蒙德等人在1995年推出(FAQ finder: a case-based approach to knowledge navigation,第11届会议上人工智能的应用程序)。

AI杂志包含一些相同的作者为评估其执行的第一篇论文的纸。 Burke等人,Question Answering from Frequently Asked Question Files: Experiences with the FAQ FINDER System,1997。它描述了它的工作原理的两个阶段:

首先,他们使用Smart(一种信息检索系统)根据用户的输入生成一组初始候选问题。它看起来像你所描述的那样工作,剔除所有单词并省略短单词停止列表中的任何内容。

接下来,考生根据统计相似性,语义相似性和覆盖对用户的查询得分。 (请阅读论文以获得详细信息。)评分语义相似性依赖于WordNet,它将英语单词分为不同的概念集合。此处查看的FAQ查找器旨在涵盖所有Usenet常见问题解答;由于您的覆盖域较小,因此您可以应用更多的领域知识,而不是WordNet提供的基础知识。

+0

这可能与Stackoverflow本身有关。 –