日期 - >段落中的概念/单词关联。 JAVA

时间:2018-02-22 17:13:49

标签: java regex spring parsing nlp

我正在调用一个分析段落的服务,并突出显示我以这种格式提供的概念/单词

{
"paragraph": "My dog got sick on 12/13/2010. Then he died on 01/13/2011."
"concept":[
    {
    "start": "6",
    "end": "9",
    "word": "sick"
    },
    {
    "start": "35",
    "end": "38",
    "word": "died"
    }]
}

将日期与单词/概念联系起来的最佳方式是什么?

我尝试过一个解析和使用正则表达式的句子,它取得了一些成功,但对于更复杂的段落和句子结构,它失败了。

如果有人有建议或推荐某种类型的NLP框架,那将非常感激。

最终结果的示例:

    {
"paragraph": "My dog got sick on 12/13/2010. Then he died on 01/13/2011."
"concept":[
    {
    "start": "6",
    "end": "9",
    "word": "sick",
    "date" 12/13/2010"
    },
    {
    "start": "35",
    "end": "38",
    "word": "died",
    "date" 01/13/2011"
    }]
}

我正在使用STS,JAVA 8,Spring Frameworks

1 个答案:

答案 0 :(得分:0)

自然语言处理(NLP)框架的选择取决于各种标准,例如问题域,应用程序类型,您要执行的流程,性能,选择语言,您希望如何使用NLP软件 - 作为库,独立工具或完整系统等。

您应该建立一个标准列表,以帮助您最好地确定适合您的方案的语言处理工具。

这些是一些广泛使用的Java NLP软件:

  1. Apache OpenNLP(图书馆)
  2. Stanford CoreNLP(完整系统)
  3. UMASS槌(包)
  4. 纳蒂(日期解析器)
  5. 如果您特别寻找自然语言日期解析器,您可以使用Natty。

    import com.joestelmach.natty.*;
    
    Parser parser = new Parser();
    List groups = parser.parse("the day before next thursday");
    
    for(DateGroup group:groups) {
       List dates = group.getDates();
       int line = group.getLine();
       int column = group.getPosition();
       String matchingValue = group.getText();
       String syntaxTree = group.getSyntaxTree().toStringTree();
       Map> parseMap = group.getParseLocations();
       boolean isRecurreing = group.isRecurring();
       Date recursUntil = group.getRecursUntil();
    }
    

    代码来源:Natty

    其他有用的链接:

    1. Natural Language date and time parser for java

    2. Algorithm to detect time, date and place from invitation text

    3. 希望它有所帮助!