【问题标题】:Detect whether the word you is a subject or object pronoun based on sentence context.根据句子上下文检测单词you是主语还是宾语代词。
【发布时间】:2012-04-19 22:36:27
【问题描述】:

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

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

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

【问题讨论】:

  • 看看我的回答;我已经更新了它。 ;-)

标签: python regex nlp linguistics


【解决方案1】:

嗯,你要实现的东西肯定非常具有挑战性,但也非常困难。

逻辑

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

基本句子结构:

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

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

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

那么(另一个过于简单化的假设)每个部分都是一个单词

所以基本上你有以下句式:

WORD WORD WORD

通常可以使用 regex 进行匹配,例如:

([\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)

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

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

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


数据

至于你感兴趣的词表,只是几个示例:

【讨论】:

  • “我去上学”不适用于此方案。好吧,我认为那里应该有一些语言库。这不仅具有挑战性,而且更具挑战性。
  • @daemonfire300 好吧,显然“我去上学”(主语 + 动词 + 介词 + 宾语)不适用于我的方案。我对 OP 的建议(我自己实际上会做同样的事情)是从最简单的版本开始,然后开始添加它...... :-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-02-20
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多