- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在为我正在构建的解决方案测试不同的 python 词形还原器。我遇到的一个难题是词干分析器生成的非英语单词不适用于我的用例。尽管词干分析器正确地将“politics”和“political”归为同一个词干,但我想用词形还原器来做到这一点,但是 spacy 和 nltk 正在为“political”和“politics”生成不同的词。有谁知道更强大的词形还原器?我理想的解决方案是这样的:
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print("political = ", lemmatizer.lemmatize("political"))
print("politics = ", lemmatizer.lemmatize("politics"))
返回:
political = political
politics = politics
我想返回的地方:
political = politics
politics = politics
最佳答案
首先,引理不是您认为的“根”词。它只是字典中存在的一种形式,对于 NLTK WordNetLemmatizer
中的英语,字典是 WordNet,只要字典条目在 WordNet 中,它就是一个词条,有“政治”和“政治”,所以它们是有效的引理:
from itertools import chain
print(set(chain(*[ss.lemma_names() for ss in wn.synsets('political')])))
print(set(chain(*[ss.lemma_names() for ss in wn.synsets('politics')])))
[输出]:
{'political'}
{'political_sympathies', 'political_relation', 'government', 'politics', 'political_science'}
也许还有其他工具可以做到这一点,但我会先尝试一下。
首先,提取所有词干名称并将具有相同词干的词条分组:
from collections import defaultdict
from wn import WordNet
from nltk.stem import PorterStemmer
porter = PorterStemmer()
wn = WordNet()
x = defaultdict(set)
i = 0
for lemma_name in wn.all_lemma_names():
if lemma_name:
x[porter.stem(lemma_name)].add(lemma_name)
i += 1
注意: pip install -U wn
然后作为健全性检查,我们检查 no.引理 > 没有。组数:
print(len(x.keys()), i)
[输出]:
(128442, 147306)
然后我们可以看一下分组:
for k in sorted(x):
if len(x[k]) > 1:
print(k, x[k])
它似乎做了我们需要将单词与它们的“词根”组合在一起的事情,例如
poke {'poke', 'poking'}
polar {'polarize', 'polarity', 'polarization', 'polar'}
polaris {'polarisation', 'polarise'}
pole_jump {'pole_jumping', 'pole_jumper', 'pole_jump'}
pole_vault {'pole_vaulter', 'pole_vault', 'pole_vaulting'}
poleax {'poleaxe', 'poleax'}
polem {'polemically', 'polemics', 'polemic', 'polemical', 'polemize'}
police_st {'police_state', 'police_station'}
polish {'polished', 'polisher', 'polish', 'polishing'}
polit {'politics', 'politic', 'politeness', 'polite', 'politically', 'politely', 'political'}
poll {'poll', 'polls'}
但是如果我们仔细观察就会发现一些困惑:
polit {'politics', 'politic', 'politeness', 'polite', 'politically', 'politely', 'political'}
所以我建议下一步是
再次遍历分组并运行一些语义并检查单词的“相关性”并拆分可能不相关的单词,也许可以尝试类似 Universal Sentence Encoder 的方法,例如https://colab.research.google.com/drive/1BM-eKdFb2G2zXqNt3dHgVm4gH8PaPJOq (可能不是一项微不足道的任务)
或者做一些手动工作并对分组重新排序。 (繁重的工作已经由分组中的 porter stemmer 完成,现在是时候做一些人工工作了)
然后您必须以某种方式在每组单词中找到词根(即集群的原型(prototype)/标签)。
终于使用你创建的词组资源,你不能“找到词根”。
关于将 "political"和 "politics"词形化为同一个词的 python 词形还原器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024637/
我一直在为我正在构建的解决方案测试不同的 python 词形还原器。我遇到的一个难题是词干分析器生成的非英语单词不适用于我的用例。尽管词干分析器正确地将“politics”和“political”归为
我正在尝试构建一个“礼貌”的滚动快照。您可能熟悉视差滚动,它有时会将面板锁定在浏览器窗口中 - 这会让您感觉您正在与滚动条作斗争。苹果的网站曾经使用过它。这是一个good example . 我想要做
有人可以详细说明aria-live="assertive"之间的区别吗?和 aria-live="polite" ? 据我了解 aria-live="assertive"将获得更高的优先级并清除队列,
我是一名优秀的程序员,十分优秀!