3

理想情况下,在 python 中使用正则表达式。我正在制作一个简单的聊天机器人,它目前在正确响应“我爱你”之类的短语时遇到问题(它会从语法处理程序中返回“你爱我”,而它应该回馈“你爱我” ”)。

另外,如果你能想到好的短语来投入这个语法处理程序,我会很高兴,那就太好了。我想要一些测试数据。

如果那里有一个很好的及物动词列表(比如“使用前 100 个”),那么使用它和特殊情况下的“及物动词 + 你”模式可能是可以接受的。

4

2 回答 2

3

好吧,您要实现的绝对是非常具有挑战性的,但也非常困难。

逻辑

作为初学者,我会先研究一下语法规则。

基本句子结构:

  • 主语 + 及物动词 + 宾语
  • 主语 + 不及物动词

(当然,我们也可以讨论“主语+动词+间接宾语+直接宾语”格式等(例如我给你球),但现在这太复杂了......)

显然,这个方案非常简单,但现在让我们坚持下去。

然后(另一个过于简单化的假设),每个部分都是一个单词

所以基本上你有以下句子计划:

WORD WORD WORD

这通常可以使用正则表达式匹配:

([\w]+)\s+([\w]+)\s+([\w]+)?

解释 :

([\w]+)     # first word (=subject)
\s+         # one or more spaces    
([\w]+)     # second word (=verb)
\s+         # one or more spaces
([\w]+)?    # (optional) third word (=object - if the verb is transitive)

现在,显然要制定像“你爱我”而不是“你爱我”这样的句子,你的算法也应该“理解”:

  • 句子的第三部分有宾语的作用
  • 由于“我”是人称代词(仅用于主格:“作为主语”),我们应该使用它的“宾格形式”(=作为宾语);因此,为此,您可能还需要人称代词表,例如
  • 我-我-我
  • 你——你——你
  • 他-他-他
  • ETC...

只是一些想法......(纯粹出于我对语言学的热情:-))


数据

至于您感兴趣的单词表,只需几个示例:

于 2012-04-06T09:04:58.160 回答
1

你想要的是一个句法分析器(又名解析器)——这可以通过@Dr.Kameleon 所描述的基于规则的系统来完成,或者通过统计来完成。那里有很多实现,其中一个是斯坦福的。这些通常会告诉你一个词的句法角色是什么(例如主语“你在这里”,或宾语“她喜欢你”)。你如何使用这些信息将陈述变成问题是完全不同的蠕虫罐头。对于英语,您可以获得一个相当简单的基于规则的系统来正常工作。

于 2012-04-07T21:46:38.177 回答