根据句子上下文检测单词是主语还是宾语代词。

时间:2012-04-06 09:00:10

标签: python regex nlp linguistics

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

另外,如果你能想出好的语言来投入这个语法处理程序,我会喜欢它,这很棒。我喜欢一些测试数据。

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

2 个答案:

答案 0 :(得分:3)

那么,你想要实现的目标肯定是非常具有挑战性的,但也非常困难。

逻辑

首先,我会先看一下语法规则。

基本句子结构:

  • SUBJECT + TRANSITIVE VERB + OBJECT
  • SUBJECT + INTRANSITIVE VERB

(当然,我们也可以谈论“主题+动词+间接对象+直接对象”等格式(例如我给你的球),但现在这会变得太复杂了......)< / em>的

显然,这个方案非常简单,但我们暂时坚持下去。

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

所以基本上你有以下句子方案:

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)

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

  • 句子的第三部分具有Object的作用
  • 由于“我”是人称代词(仅在主格案例中使用:“作为主语”),我们应该将其作为“指控形式”(=作为对象);因此,为此目的,您可能还需要例如个人代词表,如:
  
      
  • 我 - 我 - 我
  •   
  • 你 - 你 - 你
  •   
  • 他 - 他 - 他
  •   
  • 等...
  •   

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


数据

至于你感兴趣的单词列表,只有几个样本:

答案 1 :(得分:1)

你想要的是一个句法分析器(又名parser) - 这可以通过@ Dr.Kameleon描述的基于规则的系统来完成,或者统计学上。有很多实现,一个是Stanford。这些通常会告诉你一个单词的句法角色是什么(例如主题“你在这里”,或者对象“她喜欢你”)。如何使用该信息将语句转换为问题是一种完全不同的蠕虫。对于英语,您可以使用一个相当简单的基于规则的系统来正常工作。