我输入的句子包含需要匹配的自定义多单词实体,因此为此我使用了优秀的空间查找库。然而,它有一个缺陷;它不能识别句子中作为实体的复数词。例如,如果我将香蕉
声明为一个实体,并将蓝色短香蕉
作为一个句子,它将不会识别香蕉
是一个实体。我目前的“修复”方法是这样做:
# Start by lowering inputLine (just in case) and removing any whitespace trailing/leading.
doc = nlp(inputLine.lower().strip())
# Lemmatize the words so things like bananas => banana.
words = list(map(lambda token: token.lemma_, doc))
lemmatized = ' '.join(words)
基本上是在原来的句子上运行nlp,并将引理串在一起创建一个新句子。然而,这将需要我运行nlp对这个柠檬化的句子,以提取实体与空间查找,这只是感觉。。。错误的我是否在管道中遗漏了一些东西,使spacy查找能够检查引理而不是原始单词,因此只能调用nlp一次?
您可以使用NLTK
模块中的WordNet lemmatizer
,如下所示:
>>> import nltk
>>> from nltk.stem import WordNetLemmatizer
>>>
>>> wordnet_lemmatizer = WordNetLemmatizer()
>>> wordnet_lemmatizer.lemmatize("bananas")
banana
根据你的例子,你可以这样做:
sentence = "short blue bananas"
for word in sentence.split(" "):
word = word.lower()
print(wordnet_lemmatizer.lemmatize(word))
它会打印短蓝香蕉
如果您不知道如何使用nltd k
...请遵循以下步骤:
pip Install NLTK
$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> nltk.download('popular')
>>> nltk.download('wordnet')
spacy-lookup直接在README(接近用法部分的末尾)中说:“spacy-lookup
只关心令牌文本”
您必须更改spacy查找以使其执行您想要的操作,在这里:
matches = self.keyword_processor.extract_keywords(doc.text, span_info=True)
您可能会更改doc。文本
到此处的其他内容(例如,'.join([token.lemma u; for token in doc])
),但是您会遇到问题,因为空间查找依赖于文档文本中的字符偏移来处理实体跨距,因此您必须重新进行实体跨距检测/合并,使其使用标记偏移,而不是字符偏移来将实体与原始文档文本对齐。(这是可行的,但有点麻烦。)
如果只需要实体查找,可以使用spacy(或NLTK或其他方法)生成引理,然后使用flashtext自己查找实体,完全跳过spacy查找。如果你不需要任何进一步的空间分析,那么这将是最简单的选择。
其他注意事项:
>
spacy lookup似乎有一个不区分大小写的搜索选项(通过传递给flashtext的选项)
如果你想使用spacy,如果spacy的柠檬化技术足以满足你的需要(仔细检查!),没有必要改用NLTK;您可以创建一个更快的管道来禁用不需要的组件:
nlp = spacy.load('en', disable=['tagger', 'parser', 'ner'])
问题内容: 我可以在oracle数据库中使用公用表表达式进行更新吗? 我在尝试时遇到错误: 问题答案: 由于仅是一个 标量值, 您可以做 在这种情况下,Oracle首先 计算平均值 (例如),然后执行 更新 。
问题内容: 我正在使用PDO来执行一条语句,该语句使用将数组作为其值的子句: 上面的代码工作得很好,但是我的问题是为什么不能: 此代码将返回等于(1)中第一项的项目,但不返回数组(2和3)中的其余项目。 问题答案: PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用函数将所有变量连接到单个数
投的C++,简历被unity 3D捞了下,问的其实和unity 3D没啥关系,时间在1h左右,权且记录下,牛友可以做个参考 自我介绍 C++内存分布 堆和栈的区别 堆和栈的内存是怎么增长的 指针和引用的区别 链表和数组的区别 算法题:链表相交的第一个位置 算法题:链表入环的第一个位置(讲到一半不会了,还好面试官提示下完成了) 算法题:将一个元素为n的有序数组放到一个容量为n-1的有序数组中去,怎么
面试官是非常温柔有耐心的小姐姐,面试体验很好,回答不出来都会鼓励我说:没关系,那你了解……吗? 最后我感谢她她还夸我也有礼貌! 这是我第一次面试,我特别紧张也很害怕,幸亏遇到了一个很好的面试官!我担心了三天,上午一直在祈祷面试官是个温柔的小姐姐,我以为绝不可能实现没想到真的实现了!(我甚至今天提前面试的耳机电脑声音都没调好迟到了快十分钟) 小姐姐声音也特别甜!真的!我一个女生都要对她着迷了 #哪些
7.29做的笔试,8.5号约的今天面试 👥面试题目 1.自我介绍,问了问实习经历 2.Linux命令:显示当前目录、切换目录、创建目录、 查看文件 3.mysql求平均值、排序、去重的关键字 4.http和https的区别 5.http常用的请求方法 6.软件测试的流程 7.产品上线之后出现bug怎么解决?——问了问热更新我说不太了解 8.怎么判断前端bug还是后端bug? 9.app端和web
本文向大家介绍我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?,包括了我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 通过在MySQL查询中将WHERE子句与DISTINCT子句一起使用,我们将基于一个条件,即MySQL返回结果集的唯一行。通过在MySQL查询中使用LIMIT子句和DISTIN