hou*_*zi0 5 python nlp python-3.x spacy
我目前正在使用 NLP 库 Spacy 处理文本。然而,Spacy 并没有正确地对所有单词进行词形还原,因此我想扩展查找表。目前我正在将 Spacy 的常量查找表与我的扩展程序合并,然后覆盖 Spacy 的本机查找表。
然而,我有一种感觉,这种方法可能不是最好和最一致的方法。
问题:是否有另一种可能来更新 Spacy 中的查找表,例如更新或扩展功能?我已阅读文档,但找不到类似的内容。还是这种方法“很好”?
我当前方法的工作示例:
import spacy
nlp = spacy.load('de')
Spacy_lookup = spacy.lang.de.LOOKUP
New_lookup = {'AAA':'Anonyme Affen Allianz','BBB':'Berliner Bauern Bund','CCC':'Chaos Chaoten Club'}
Spacy_lookup.update(New_lookup)
spacy.lang.de.LOOKUP = Spacy_lookup
tagged = nlp("Die AAA besiegt die BBB und den CCC unverdient.")
[ print(each.lemma_) for each in tagged]
Die
Anonyme Affen Allianz
besiegen
der
Berliner Bauern Bund
und
der
Chaos Chaoten Club
unverdient
.
Run Code Online (Sandbox Code Playgroud)
你的解决方案看起来不错。
然而,我更干净的解决方法是利用自定义 spaCy 管道功能。具体来说,您可以创建一个新组件,如果令牌位于您的文档中,则该组件会更新 lemma 属性,然后将其堆栈到您的管道中。
示例代码:
import spacy
custom_lookup = {'AAA':'Anonyme Affen Allianz','BBB':'Berliner Bauern Bund','CCC':'Chaos Chaoten Club'}
def change_lemma_property(doc):
for token in doc:
if (token.text in custom_lookup):
token.lemma_ = custom_lookup[token.text]
return doc
nlp = spacy.load('de')
nlp.add_pipe(change_lemma_property, first=True)
text = 'Die AAA besiegt die BBB und den CCC unverdient.'
doc = nlp(text)
[print(x.lemma_) for x in doc]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |