我正在从单个文档中提取关键字/短语。我从进行词频分析开始,但这会返回诸如“新”之类的词,这些词不是很有帮助。所以我想惩罚常见的单词和短语,我们通常使用 idf(逆文档频率)。但由于它是针对单个文档的,我不确定如何进行 idf 分析。
是否可以将 tf-idf 方法与(所有?)单词的预先计算的 idf 值一起使用?这些值是否在某处可用?
我正在从单个文档中提取关键字/短语。我从进行词频分析开始,但这会返回诸如“新”之类的词,这些词不是很有帮助。所以我想惩罚常见的单词和短语,我们通常使用 idf(逆文档频率)。但由于它是针对单个文档的,我不确定如何进行 idf 分析。
是否可以将 tf-idf 方法与(所有?)单词的预先计算的 idf 值一起使用?这些值是否在某处可用?
我不相信那里有任何预先计算的 idf 值。逆文档频率 (idf) 是特定单词出现在语料库中的文档数量的倒数。如果你只有一个文件,恐怕值只是 1。
但是,如果您希望摆脱诸如、as和it 之类的没有多大意义的词,Python 中有一些有用的工具可以从您的文档中删除这些“停用词”,并且可能会对您有所帮助。nltk
这是一个有用的例子。
Thiraputhi 是正确的,Zipf 定律可用于从 20,000 个最常用单词的有序列表中获得一组相当不错的 IDF 值。然而,谷歌的 n-grams 自 2012 年以来就已经可用,其中包含您正在寻找的数据,尽管您必须使用 awk 或其他一些编程语言或工具从他们的 unigrams(即 1-grams)数据集中提取它。如果你去到 Thiraputhi 提到的 repo 的顶部,他们甚至有点提到这些 Google n-gram,奇怪的是,他们还提到他们的 repo 中的文件来自 Peter Norvig 的 1/3 百万最常用单词列表。Norvig 在他的网站上声称这些来自谷歌的“Trillion word corpus”。这可能是谷歌用来生成他们的 n-gram 的同一个语料库,我不确定。但是诺维格'
TF-IDF = 单个文档中术语的频率(字数)除以更大语料库中该词的频率(字数),后一个术语在 Norvig 文件的第 2 列中找到。当您拥有包含该列的原始文件时,使用 Zipf 定律来近似该列是多余的。以下是回答您问题的链接:
Google 的 n-gram,包括 1-gram: http ://storage.googleapis.com/books/ngrams/books/datasetsv2.html
Norvig 更方便的 1/3 百万字数据集: https ://norvig.com/ngrams/count_1w.txt
Norvig 的主要 n-gram 页面上还有许多其他有价值的数据集: https ://norvig.com/ngrams/
仅使用 Norvig 非常方便的数据集可能很诱人,但我相信它会更符合科学方法(即“可重复性”)从 Google 的 1-gram 中进行自己的提取。我相信这实际上应该产生超过一百万个单词的 1/3,因为 google 的 n-gram 将很多大多数人不会认为是单词的东西解释为单词,例如 123:45 和类似的东西。如果您有执行查找的处理能力,或者可以将数据集转换为快速键值存储,则可以将这些保留在数据集中。有许多开源键值存储可用,包括 Tokyo cabinet 和我忘记名字的其他存储,还有 sqlite。所以如果你能以某种方式把它变成一个快速的键值存储或其他数据库,或者如果你有处理能力,那么这可能比试图筛选所有这些数据行以获取适合您需求的数据更好。否则,您将不得不找出一些规则,例如“没有连字符和冒号”或“严格按字母顺序”或“严格按字母数字顺序”,并删除所有不合适的内容。如果这是出于某种科学目的,请确保记录您所做的一切。
编辑:您将需要来自个人文档的总字数以及来自语料库的总字数。对于 google 的 n-gram,后者可以在链接页面上标记为 total_counts 的文件中找到。