Python 用空格处理语法错误
我正在寻找一些帮助和技巧,以处理建立一个个人助理使用语音输入 我的项目有几个管道,其中一个管道使用python的SpeechRecognizer并将其发送到一个新的管道,该管道解析生成的文本,以便分析请求的操作以及它应该影响的内容 问题是,有时我可以从用户那里得到以下句子: “将音量设置为86%。” 问题是,当我使用Python 用空格处理语法错误,python,nlp,spacy,Python,Nlp,Spacy,我正在寻找一些帮助和技巧,以处理建立一个个人助理使用语音输入 我的项目有几个管道,其中一个管道使用python的SpeechRecognizer并将其发送到一个新的管道,该管道解析生成的文本,以便分析请求的操作以及它应该影响的内容 问题是,有时我可以从用户那里得到以下句子: “将音量设置为86%。” 问题是,当我使用en_core\u web\u sm模型时,我发现“Set”不是一个动词,而是一个形容词,但如果我给它一个句子“Set The volume to 86%”,它就会被识别为一个动词。
en_core\u web\u sm
模型时,我发现“Set”不是一个动词,而是一个形容词,但如果我给它一个句子“Set The volume to 86%”,它就会被识别为一个动词。
这种奇怪的行为把我的助手搞得一团糟——你有什么办法来处理吗?我会尽量简短地回答你的每一个问题,但请记住,其中一些问题还没有完全得到回答
这句话在spacy 2.3.x中解析为OK/en core web sm/nd/lg:
['VBN','NN','in','CD','NN']
- 至少词性标记正确地将“set”识别为动词VB*而不是名词NN
- 好吧,不应该是“设定”的
>>> [k.tag_ for k in sy_sm("Set the set of sets to a set result.")]
['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'VBN', 'NN', '.']
^^ - okay ^^^ - I think this should be ADJ, it's not really a past participle
>>> [k.tag_ for k in sy_md("Set the set of sets to a set result.")]
['VBN', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'JJ', 'NN', '.']
^^^ - not past tense ^^ correct
>>> [k.tag_ for k in sy_lg("Set the set of sets to a set result.")]
['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'NN', 'NN', '.']
^^ - okay ^^ - should be ADJ
我的句子很简单,因此应该更简单。我想我可能没有把问题说清楚——这三点是我程序的一部分,如果“the”跟在后面,我可以很容易地把“Set”这个词当作动词,但如果没有“the”,它就不会把它当作动词。是的,我明白了。您必须记住,这个“标记”过程(查找短语中的每个单词并确定它是否是“动词”等)是基于机器学习模型的。该模型是概率的,并且可以根据用于训练的语料库(标记文本数据集)而变化。spacy使用的模式是“猜测”,根据相邻的单词,“Set”是一个名词,如果没有“thecloseby”,则为动词,否则为动词。这就是为什么会有这种差异,明白吗?我提到了另一个工具,因为它是在不同的语料库上训练的,所以它的“猜测”是不同的。这有什么奇怪的“Set”在上下文中有多种含义,缺少“the”Spacy无法猜测另一个更有用的含义可能是什么。因此,这应该是您在任何NLP任务中必须处理的预期行为(尤其是客户不写类似报纸的消息,这在编写助手程序时必须考虑)。spacy 2.3.x/en-core-web-sm/nd/lg中的这句话解析得很好:
['VBN','NN','in','CD','NN]
。请编辑问题,说明您使用的是什么版本?并使用最新版本重新测试
>>> [k.tag_ for k in sy_sm("Set the set of sets to a set result.")]
['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'VBN', 'NN', '.']
^^ - okay ^^^ - I think this should be ADJ, it's not really a past participle
>>> [k.tag_ for k in sy_md("Set the set of sets to a set result.")]
['VBN', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'JJ', 'NN', '.']
^^^ - not past tense ^^ correct
>>> [k.tag_ for k in sy_lg("Set the set of sets to a set result.")]
['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'NN', 'NN', '.']
^^ - okay ^^ - should be ADJ