Java中是否有用于文本分析/挖掘的API?

时间:2011-07-23 12:56:35

标签: java api nlp analysis text-mining

我想知道是否有用Java进行文本分析的API。可以提取文本中的所有单词,单独的单词,表达式等的东西。如果找到的单词是数字,日期,年份,名称,货币等,则可以通知。

我现在开始进行文本分析,所以我只需要一个API来启动。我做了一个网络爬虫,现在我需要一些东西来分析下载的数据。需要计算页面中单词数量,类似单词,数据类型和与文本相关的其他资源的方法。

Java中是否有用于文本分析的API?

编辑:文本挖掘,我想挖掘文本。提供此功能的Java API。

5 个答案:

答案 0 :(得分:26)

看起来你正在寻找Named Entity Recogniser

你有几个选择。

来自斯坦福自然语言处理组的

CRFClassifier是命名实体识别器的Java实现。

GATE (General Architecture for Text Engineering),一个用于语言处理的开源套件。请查看开发人员页面上的屏幕截图:http://gate.ac.uk/family/developer.html。它应该让你简要了解这可以做些什么。 video tutorial可以让您更好地了解该软件的功能。

您可能需要自定义其中一个以满足您的需求。

您还有其他选择:


在CRFClassifier的培训方面,您可以找到brief explanation at their FAQ

  

......训练数据应该是以制表符分隔的列,而你   通过地图定义这些列的含义。一栏应该是   称为“答案”并具有NER类,并且现有功能已知   关于“word”和“tag”这样的名字。你定义数据文件,地图,   以及通过属性文件生成的功能。有   有关不同属性的特征的大量文档   在NERFeatureFactory的Javadoc中生成,尽管最终是你   必须去源代码回答一些问题......

您还可以在javadoc of CRFClassifier

找到代码段
  

典型的命令行用法

     

用于在a上运行带有序列化分类器的训练模型   文本文件:

     

java -mx500m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier conll.ner.gz -textFile samplesentences.txt

     

在属性文件中指定所有参数时(训练,测试或   运行时):

     

java -mx1g edu.stanford.nlp.ie.crf.CRFClassifier -prop propFile

     

从命令行训练和测试一个简单的NER模型:

     

java -mx1000m edu.stanford.nlp.ie.crf.CRFClassifier -trainFile trainFile -testFile testFile -macro > output

答案 1 :(得分:10)

例如 - 您可以使用标准库java.text中的某些类,或使用StreamTokenizer(您可以根据自己的要求对其进行自定义)。但正如您所知 - 来自互联网资源的文本数据通常会出现许多拼写错误,为了获得更好的性能,您必须使用类似模糊标记符 - java.text和其他标准工具在这种情况下的能力太强

所以,我建议您使用正则表达式(java.util.regex)并根据需要创建自己的标记器。

<强> P.S。 根据您的需要 - 您可以创建状态机解析器来识别原始文本中的模板化部分。您可能会在下面的图片中看到简单的状态机识别器(您可以构建更高级的解析器,它可以识别文本中更复杂的模板)。

enter image description here

答案 2 :(得分:8)

如果您正在处理大量数据,那么Apache的Lucene可能会帮助您满足需求。

否则,最简单的方法就是创建自己的Analyzer类,该类严重依赖于标准的Pattern类。这样,您可以控制哪些文本被视为单词,边界,数字,日期等。例如,20110723是一个日期或数字?您可能需要实现多遍解析算法以更好地“理解”数据。

答案 3 :(得分:2)

我建议同时查看LingPipe。如果您对webservices没问题,那么this article可以很好地总结不同的API

答案 4 :(得分:2)

我宁愿适应Lucene的Analysis和Stemmer课程而不是重新发明轮子。他们覆盖了绝大多数案件。另请参阅additional类和contrib类。