python - 将索引缩减为 "interesting"个词以供将来搜索词使用

标签 python search nlp nltk trie

我有一个从政府成绩单数据库中删除的大约 18,000 个唯一单词的列表,我希望可以在网络应用程序中搜索这些单词。问题:此 Web 应用程序必须是客户端。 (允许使用 AJAX。)

所有的原始成绩单都在我的服务器上的整齐的文本文件中,因此单词的索引文件将列出哪些文件包含每个单词以及包含多少次,如下所示:

ADMINSTRATION   {"16": 4, "11": 5, "29": 4, "14": 2}
ADMIRAL {"34": 12, "12": 2, "15": 9, "16": 71, "17": 104, "18": 37, "19": 23}
AMBASSADOR  {"2": 15, "3": 10, "5": 37, "8": 5, "41": 10, "10": 2, "16": 6, "17": 6, "50": 4, "20": 5, "22": 17, "40": 10, "25": 14}

我已将其简化为最终形式的 trie 结构以节省空间并加快检索速度,但即便如此,即使删除了停用词,18K 字的位置数据也约为 5MB。但是没有人会合理地去搜索断章取义的形容词和从属连词。

我意识到这既是一个语言问题,也是一个编码问题,但我想知道在 NLP 中是否有一个通用的解决方案来将文本简化为脱离上下文有意义的单词。

我尝试通过 Python NLTK 词性标注器运行每个单词,但正如人们所预料的那样,当单词单独存在时,错误率很高。

最佳答案

我不会尝试减小字典的大小(您的 18K 个单词),因为很难猜测哪些单词对您的应用程序/用户“有意义”。

相反,我会尝试减少每个文档放在索引中的单词数。例如,如果 50% 的文档有一个给定的单词 W,则对其进行索引可能毫无用处(当然,如果没有看到您的文档和您的域,我无法确定!)。

如果是这样,你可以计算出TF-IDFs在您的文档中,并选择一个阈值,低于该阈值您就不会费心去提供索引。您甚至可以选择索引的最大大小(例如 1MB)并找到符合此要求的阈值。

无论如何,我绝不会尝试使用词性标记。套用关于 Regex 的名言:

您有一个简单的索引问题。您尝试使用 POS-tagging 来解决它。现在你有两个问题。

关于python - 将索引缩减为 "interesting"个词以供将来搜索词使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17704326/

相关文章:

nlp - 分类情感词的开放词典

python - Django-haystack 通用 SearchView - 无结果

python - VirtualEnv 创建环境。使用所有系统范围的包而不是干净的环境

javascript - 从 ajax jquery post 响应中获取 <h2> 元素内的文本

linux - 查找包含字符串的文件,但几个文件夹除外

python - 如何检查经过训练的词汇和 TfidfVectorizer 是否正确应用于另一个语料库?

python - 单词A和B的语义相似度 : Dependency on frequency of A and B in corpus?

python - 调用 Python 脚本时传递变量

python - 语法错误 : invalid syntax

android - 如何从条形码在线获取产品名称?