关键词云是如何构建的?

How are keyword clouds constructed?

关键字云是如何构建的? 我知道有很多 nlp 方法,但我不确定它们是如何解决以下问题的:

您可以有多个项目,每个项目都有与其相关的关键字列表。

(在我自己的程序中,这些项目是我可以使用 nlp 方法检测专有名词、人物、地点和(?)可能的主题的文章。如果文章足够大,这将是一个非常大的列表,但我会假设我可以通过比较文章使用某种方法来筛选列表。我很困惑如何正确地做到这一点。

每个项目都可以有一个关键字列表,但他们如何选择关键字,使每个项目之间的关键字既不过分具体也不过分笼统? 例如,通常 "the" 可以是一个包含很多项的关键字。 而"supercalifragilistic"只能是一个。

假设 我可以创建一个启发式方法,如果一个词存在于 n 足够小的项目的 n% 中,但是 return 一个不错的子列表(假设 1000 篇文章中的 5% 是 50,这似乎是合理的)然后我就可以使用它了。 但是,我采用这种方法的问题是,给定两组完全不同的项目,项目之间的相互关联性很可能存在一些差异,我将丢弃信息。

这很不令人满意。

我觉得鉴于关键字云的流行,一定已经创建了一个解决方案。但是我不想使用库,因为我想理解和操纵数学中的假设。

如果有人有任何想法请告诉我。

谢谢!

编辑:

freenode/programming/guardianx 已建议 https://en.wikipedia.org/wiki/Tf%E2%80%93idf

tf-idf 还可以,但问题是权重需要先验确定。鉴于两个不同的文档集合在文档之间将具有不同的内在相似性,假设先验加权感觉不正确

freenode/programming/anon建议https://en.wikipedia.org/wiki/Word2vec

我不确定我想要使用神经网络的东西(这个问题有点复杂?),但仍在考虑。

Tf-idf is still a pretty standard method for extracting keywords. You can try a demo of a tf-idf-based keyword extractor (which has the idf vector, as you say apriori determined, estimated from Wikipedia). A popular alternative is the TextRank algorithm based on PageRank that has an off-the-shelf implementation in Gensim.

如果您决定自己实施,请注意所有算法通常都需要大量调整和文本预处理才能正常工作。

您至少需要删除您知道它们永远不能成为关键字的停用词(介词、冠词、代词等)。如果您想要更高级的东西,您可以使用 Spacy 来只保留所需的词性(名词、动词、形容词)。还可以包括频繁的多词表达(gensim有很好的自动搭配检测功能),命名实体(spacy可以做到)。如果您 运行 共指消解并将代词替换为代词所指代词,您可以获得更好的结果...有无穷无尽的改进选项。