python - 在python中删除TFIDF结果的同义词
问题描述
我目前正在做一个项目,在 python 中使用 tfidf 获取文档集前 10 个最相关的单词。但是,有些结果是得到相同的单词及其复数或副词左右。为了解决这个问题,我决定使用词干提取,但这会导致一个问题,即单词和它们的反义词可以具有相同的词根,或者通过将词归约到词根不能返回并在文档中找到该特定词如果用户要搜索它。在这种情况下,有没有可能比 nlp 更好的 nlp?任何提示或链接都会很有用。我正在研究与 youtube 非常相似的东西。
解决方案
首先,您需要在 Stems 和 Lemmas 之间做出选择(注意,Roots都不是)。谷歌了解更多关于这方面的差异。
您提到反义词,但大多数是由前缀决定的(例如重要与(不)重要)。所以 Stemmer 应该保持大多数反义词不变。
至于同义词,假设您只考虑具有完全相同词干的词,因为如果您想将同义词与完全不相关的词根联系起来,您会考虑语义和类似wordnet之类的东西,但这可能会使您的问题复杂化合理的...
根据您的问题,您已经有一个在 Python 中工作的 Stemmer ......最简单的解决方案是使用两个字典:一个字典将词干/引理映射到屈折/派生的完整单词(和/或它们的频率)的集合/列表。第二个字典将这些完整的单词映射到它们在您正在索引的文档中的不同位置。
这样你就可以对用户输入的词进行词干化,在 top-k tf-idf
/stem 词典中检查它,然后将带有第二个词典的完整词映射到它在文档集中出现的位置。
(鉴于您的问题,很难进一步详细说明。)
推荐阅读
- c# - 如何将泛型类型对象传递给类构造函数
- amazon-web-services - Cloud9 给出不同的卷曲响应
- c++builder - Embarcadero C++Builder 10.4 会有社区版吗?
- react-native - 所有 react-native-paper 组件都会抛出关于 Accessibility API 的类型错误
- python - 在 django 模型中,外键没有检索实际值
- flutter - 如何使用dio在flutter中成功响应时导航到不同的屏幕
- java - 将 springboot 升级到 2.4.2 版本后,@ActiveProfiles 注释不起作用
- linux - 如何从提交对象 git ls-tree?
- jakarta-mail - Jakarta Mail OAUTH 通过 POP 协议支持 Office365
- database - Docker撰写将SQL复制到卷但不导入数据库