我不得不在核心java中开发一个项目,我将从用户那里获取大约100行文本。现在,我想将整个文本分成簇,其中每个簇将与关键字相关,例如假设我有如下文本:
“Java是一种面向对象的语言。它使用类进行模块化.bla bla bla ...
C ++也是一种面向对象的语言。 bla bla bla ...
关于OOPS概念的一些内容......“
现在,如果我将整个文本作为程序的输入,我希望程序应该创建具有关键字名称的目录,并且它还应该自己选择关键字。我希望本文中的关键字是Java,Modularisation,C ++,OOPS。在这个程序的后期阶段,我将处理不同的文本,所以我必须使这个程序足够聪明,以了解哪些单词是关键词,哪些不是。这样它就可以处理任何文本。
所以,我找了许多地方,问了很多人,看了很多教程才发现它们主要是聚类数字数据。但是,很少有人在处理文本聚类。我正在寻找一种可以完成这项工作的算法或方法。
由于
答案 0 :(得分:0)
您之所以只找到教程,是因为机器学习领域的算法需要数字数据。因此,您必须以数字格式转换数据。 为了创建文本的数字重新定位,有许多算法。例如 Levenshtein distnace 。 通过此距离测量,您可以进行数值重新定量,并且聚类算法也适用。 例如,您可以使用k-Means算法或任何其他算法来对文本数据进行聚类。
你还应该谷歌一点关于文本挖掘,网上有很多很好的例子。这个link可能是一个很好的资源
答案 1 :(得分:0)
您可以使用多种方法预处理文本,然后对处理过的数据进行聚类。一个示例是生成文本的bag-of-words表示和应用聚类方法。
但是,我个人会选择LDA主题建模。该算法本身并不是“聚类”。您的文本,但可以用作文本群集的预处理步骤。这是另一种无监督的方法,它为您提供与一组文档或句子相关联的主题列表。这些主题实际上是一组被认为彼此相关的单词,这些单词基于它们在底层文本中的显示方式。例如,以下是从一组推文中提取的三个主题:
然后,您可以通过计算这些单词出现在句子中的次数和总单词数来计算属于每个主题的句子的概率。最后,这些概率值可用于文本聚类。我还应该注意,LDA生成的这些单词是加权的,因此您可以使用权重最大的单词作为主要关键字。例如,' food',' home'和' stats'在上面的列表中分别具有最大权重。
对于LDA实现,请查看用Java开发的Mallet库。