Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据句子上下文判断单词you是主语还是宾语代词。_Python_Regex_Nlp_Linguistics - Fatal编程技术网

Python 根据句子上下文判断单词you是主语还是宾语代词。

Python 根据句子上下文判断单词you是主语还是宾语代词。,python,regex,nlp,linguistics,Python,Regex,Nlp,Linguistics,理想情况下,在python中使用正则表达式。我正在制作一个简单的聊天机器人,它目前在正确响应诸如“我爱你”之类的短语时遇到问题(当它应该返回“你爱我”时,它会从语法处理程序中抛出“你爱我”) 另外,如果你能想出一些好的短语加入这个语法处理程序,那就太好了。我想要一些测试数据 如果有一个很好的及物动词列表(比如“使用的前100名”),那么可以使用“及物动词+你”模式 好吧,你想要实现的肯定是非常具有挑战性的,但也非常困难 逻辑 作为初学者,我会先研究一下语法规则 基本句子结构: WORD WORD

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

另外,如果你能想出一些好的短语加入这个语法处理程序,那就太好了。我想要一些测试数据


如果有一个很好的及物动词列表(比如“使用的前100名”),那么可以使用“及物动词+你”模式

好吧,你想要实现的肯定是非常具有挑战性的,但也非常困难

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

基本句子结构:

WORD WORD WORD
([\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)
  • 主语+及物动词+宾语
  • 主语+不及物动词
(当然,我们也可以讨论“主语+动词+间接宾语+直接宾语”等格式(例如,我给你球),但现在这将变得太复杂了……)

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

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

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

WORD WORD WORD
([\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)
通常可以使用正则表达式匹配,如:

([\w]+)\s+([\w]+)\s+([\w]+)?
说明:

WORD WORD WORD
([\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”是一个人称代词(仅用于主格:“作为主语”),我们应该把它的“宾格形式”(=作为宾语);因此,为此,您可能还需要例如人称代词表,如:
  • 我-我-我
  • 你-你-你
  • 他-他-他
  • 等等
只是一些想法。。。(纯粹出于我对语言学的热情:-)


资料 对于您感兴趣的单词列表,仅举几个示例:

  • (大多数——如果不是全部的话——都是 可传递的)

您需要的是语法分析器(aka)-这可以通过@Dr.Kameleon所描述的基于规则的系统来完成,也可以通过统计来完成。有很多实现,一个就是一个。这些通常会告诉你一个词的句法角色是什么(例如,主语“你在这里”,或宾语“她喜欢你”)。你如何利用这些信息把陈述变成问题是一个完全不同的问题。对于英语,你可以使用一个相当简单的基于规则的系统来工作。

看看我的答案;我已经更新了。;-)“我上学”不适用于这个计划。我认为应该有一些语言库。这不仅仅是挑战,更是过度挑战。@daemonfire300哦,很明显,“我去上学”(主语+动词+介词+宾语)对我的计划不起作用。我对OP的建议(实际上我自己也会这么做)是从最简单的版本开始,然后开始添加到其中…:-)