无意义的空间名词

Meaningless Spacy Nouns

我正在使用 Spacy 从句子中提取名词。这些句子语法很差,可能还包含一些拼写错误。

这是我正在使用的代码:

代码

import spacy
import re

nlp = spacy.load("en_core_web_sm")

sentence= "HANDBRAKE - slow and fast (SFX)"
string= sentence.lower()
cleanString = re.sub('\W+',' ', string )
cleanString=cleanString.replace("_", " ")

doc= nlp(cleanString)

for token in doc:
    if token.pos_=="NOUN":
        print (token.text)
 

输出:

sfx

与句子“fast foward2”类似,我得到 Spacy 名词

foward2

这表明这些名词中有一些无意义的词,如:sfx、foward2、ms、64x、bit、pwm、r、brailledisplayfastmovement等

我只想保留包含 broom、ticker、pool、highway 等合理的单词名词的短语

我尝试过 Wordnet 来过滤 wordnet 和 spacy 之间的常用名词,但它有点严格,并且也过滤了一些有意义的名词。例如,它会过滤摩托车、呼啸声、手推车、金属、手提箱、拉链等名词

因此,我正在寻找一种解决方案,可以从我获得的空洞名词列表中过滤掉最敏感的名词。

看来你可以使用 pyenchant library:

Enchant is used to check the spelling of words and suggest corrections for words that are miss-spelled. It can use many popular spellchecking packages to perform this task, including ispell, aspell and MySpell. It is quite flexible at handling multiple dictionaries and multiple languages.

More information is available on the Enchant website:

https://abiword.github.io/enchant/

示例 Python 代码:

import spacy, re
import enchant                        #pip install pyenchant

d = enchant.Dict("en_US")
nlp = spacy.load("en_core_web_sm")

sentence = "For example, it filters nouns like motorbike, whoosh, trolley, metal, suitcase, zip etc"
cleanString = re.sub('[\W_]+',' ', sentence.lower()) # Merging \W and _ into one regex

doc= nlp(cleanString)
for token in doc:
    if token.pos_=="NOUN" and d.check(token.text):
        print (token.text)
# => [example, nouns, motorbike, whoosh, trolley, metal, suitcase, zip]

在使用 pyenchant 拼写检查器时,我发现在将单词完全转换为大写后进行检查很有用。此外,拆分 sentence/phrase 并一次输入一个单词可获得更好的结果。

示例:

enchantChecker.check("landsat".upper()) and enchantChecker.check("wwii".upper()) returns True where as using lowercase words returns False.

如果您需要混合使用多个拼写检查器,另一个好的方法是在加载 en_core_web_lg

后检查 spaCy 库的 is_oov(词汇量不足)标志