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

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

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

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

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

例如 – 您可以使用标准库java.text某些类,或使用StreamTokenizer (您可以根据您的要求对其进行自定义)。 但是你知道 – 来自互联网资源的文本数据通常会有许多拼写错误 ,为了获得更好的性能,你必须使用像模糊标记器这样的东西 – java.text和其他标准工具在这种情况下的function太有限

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

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

在此处输入图像描述

看起来您正在寻找一个命名实体识别器 。

你有几个选择。

斯坦福自然语言处理组的CRFC分类器是命名实体识别器的Java实现。

GATE(文本工程通用架构) ,一个用于语言处理的开源套件。 请查看开发人员页面上的屏幕截图: http : //gate.ac.uk/family/developer.html 。 它应该让你简要了解这可以做些什么。 video教程可让您更好地了解该软件的function。

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

您还有其他选择:

  • 通过Web服务提取简单文本:例如Tagthe.net和Yahoo的Term Extractor 。
  • 词性(POS)标记 :从文本中提取词性(例如动词,名词)。 这是一篇关于SO的文章: 什么是用于词性标注的优秀Java库? 。

在CRFClassifier的培训方面,您可以在他们的常见问题解答中找到简要说明 :

…训练数据应该以制表符分隔的列,并通过地图定义这些列的含义。 一列应该被称为“答案”并且具有NER类,并且现有的特征知道诸如“单词”和“标签”之类的名称。 您可以定义数据文件,地图以及通过属性文件生成的function。 有大量文档说明不同属性在NERFeatureFactory的Javadoc中生成了什么function,但最终你必须转到源代码来回答一些问题……

您还可以在CRFClassifier的javadoc中找到代码段:

典型的命令行用法

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

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

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

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

我也建议看看LingPipe 。 如果您对webservices没问题,那么本文将对不同的API进行总结

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