我想知道是否有用Java进行文本分析的API。可以提取文本中的所有单词,单独的单词,表达式等的东西。如果找到的单词是数字,日期,年份,名称,货币等,则可以通知。
我现在开始进行文本分析,所以我只需要一个API来启动。我做了一个网络爬虫,现在我需要一些东西来分析下载的数据。需要计算页面中单词数量,类似单词,数据类型和与文本相关的其他资源的方法。
Java中是否有用于文本分析的API?
编辑:文本挖掘,我想挖掘文本。提供此功能的Java API。
答案 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。强> 根据您的需要 - 您可以创建状态机解析器来识别原始文本中的模板化部分。您可能会在下面的图片中看到简单的状态机识别器(您可以构建更高级的解析器,它可以识别文本中更复杂的模板)。
答案 2 :(得分:8)
如果您正在处理大量数据,那么Apache的Lucene可能会帮助您满足需求。
否则,最简单的方法就是创建自己的Analyzer类,该类严重依赖于标准的Pattern类。这样,您可以控制哪些文本被视为单词,边界,数字,日期等。例如,20110723是一个日期或数字?您可能需要实现多遍解析算法以更好地“理解”数据。
答案 3 :(得分:2)
我建议同时查看LingPipe。如果您对webservices没问题,那么this article可以很好地总结不同的API
答案 4 :(得分:2)
我宁愿适应Lucene的Analysis和Stemmer课程而不是重新发明轮子。他们覆盖了绝大多数案件。另请参阅additional类和contrib类。