python 将单词“cant”添加到Spacy停用词中

yqlxgs2m  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(186)

如何让SpaCy将“cant”和“wont”等词设置为停用词?
例如,即使有了标记化,它也会将“can't”识别为停用词,而不是“cant”。
当它看到“cant”时,它去掉“ca”,但留下“nt”。这是设计好的吗?我猜“nt”实际上不是一个词。
下面是一个示例代码:

import spacy
from spacy.lang.en.stop_words import STOP_WORDS
nlp = spacy.load("en_core_web_sm")

text = "cant can't cannot"
doc = nlp(text)

for word in doc:
    print(word,":",word.is_stop)

ca : True
nt : False
ca : True
n't : True
can : True
not : True
hgqdbh6s

hgqdbh6s1#

标记器将"cant"拆分为"ca"和"nt"。将"cant"添加到列表中不会产生任何效果,因为将不会匹配任何标记。相反,应该像示例(第3行代码)中那样添加"nt"。
另外,在加载模型之前更新停止词也很重要,否则不会选择更改。
示例:

import spacy
from spacy.lang.en.stop_words import STOP_WORDS

STOP_WORDS.add("nt")

nlp = spacy.load("en_core_web_sm")

text = "cant can't cannot"
doc = nlp(text)

for word in doc:
    print(word,":",word.is_stop)
ca : True
nt : True
ca : True
n't : True
can : True
not : True
5ktev3wc

5ktev3wc2#

正如Spacy文档中所述,标记器不能向文本添加或删除信息,因此您总是能够重构相同的输入文本(使用存储在Token中的空白信息),这也意味着如果文本包含拼写错误,它们将被保留。
因此,在标记化过程中不会出现错误,因为Spacy将 * can 't * 或 * don 't * 这样的结构拆分为两个不同的标记:例如,“做”和“不做”。

  • cant* 和 wont 是两个拼写错误(实际上,它们是真正的英语单词,Spacy“能够识别”为助动词,然后像拆分 * can 't * 或 * won 't * 一样拆分它们)。我们可以说拆分是正确的,它遵循这些单词的正确版本所遵循的规则,唯一的问题在于如何将 wont 识别为停用词。你可以看到here是Spacy使用的停用词列表;例如,ca 出现,这就是为什么它被正确地识别为停用词(* n 't * 被添加在缩写的末尾)。

如果拆分适合您的用例,则可以手动将 wont 添加到停用词列表中。

import spacy
from spacy.lang.en.stop_words import STOP_WORDS

my_stop_words = ["nt", "wo"]
STOP_WORDS.update(my_stop_words)
nlp = spacy.load("en_core_web_sm")

# analyze docs

如果出于某种原因,你需要对文本中的停用词做一些处理,你希望使用 wontcant,而不是 wontcant,你可以考虑通过检查尾部空格是否为空(意味着标记附加在原始文本中)来连接连续的停用词:

stop_words_in_text = []
doc = nlp("Today I cant go to work. We wont come to your party.")

for token in doc:
    i = token.i
    if token.is_stop:
        if i > 0 and doc[i-1].whitespace_ == "" and doc[i-1].is_stop:
            stop_words_in_text[-1] += token.text
        else:
            stop_words_in_text.append(token.text)

print(stop_words_in_text)

['I', 'cant', 'go', 'to', 'We', 'wont', 'to', 'your']

希望这对你有所帮助。你也可以实现自定义的Spacy组件,如果你需要添加特殊的标记化情况,请在这里检查。

相关问题