当前位置: 首页 > 知识库问答 >
问题:

将spacy查找与柠檬化句子一起使用?

孟鸿德
2023-03-14

我输入的句子包含需要匹配的自定义多单词实体,因此为此我使用了优秀的空间查找库。然而,它有一个缺陷;它不能识别句子中作为实体的复数词。例如,如果我将香蕉声明为一个实体,并将蓝色短香蕉作为一个句子,它将不会识别香蕉是一个实体。我目前的“修复”方法是这样做:

# 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一次?

共有2个答案

田阳泽
2023-03-14

您可以使用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...请遵循以下步骤:

  1. 通过运行pip Install NLTK
  2. 打开终端并键入以下内容以下载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')
邹京
2023-03-14

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的有序数组中去,怎么

    • 面试官是非常温柔有耐心的小姐姐,面试体验很好,回答不出来都会鼓励我说:没关系,那你了解……吗? 最后我感谢她她还夸我也有礼貌! 这是我第一次面试,我特别紧张也很害怕,幸亏遇到了一个很好的面试官!我担心了三天,上午一直在祈祷面试官是个温柔的小姐姐,我以为绝不可能实现没想到真的实现了!(我甚至今天提前面试的耳机电脑声音都没调好迟到了快十分钟) 小姐姐声音也特别甜!真的!我一个女生都要对她着迷了 #哪些

    • 本文向大家介绍我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?,包括了我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 通过在MySQL查询中将WHERE子句与DISTINCT子句一起使用,我们将基于一个条件,即MySQL返回结果集的唯一行。通过在MySQL查询中使用LIMIT子句和DISTIN

    • 自然语言处理(NLP),尤其是英语,已经发展到这样一个阶段,如果存在“完美”的词干分析器,词干分析将成为一项古老的技术。这是因为词干分析器将单词/符号的表面形式改变为一些无意义的词干。 然后,由于不同的非线性规划任务需要不同级别的柠檬化,因此“完美”柠檬化器的定义再次受到质疑。E、 g.在动词/名词/形容词形式之间转换单词。 词干分析器 柠檬酸酯 > 所以问题是,英语词干在今天有用吗?因为我们有过