java:智能文本拆分

时间:2014-11-30 09:50:10

标签: java clojure split nlp

我有一些句子,如:美国,钥匙圈,

我希望将所有句子分成空格,但要聪明地分开, 美国成为:"联合国" "状态" "美国" 带戒指的钥匙:"钥匙" "带戒指" 北京女王:"女王" "北京"

我们在java / clojure / scala中是否有一些用于此类拆分的库? 或者任何算法都可以帮助解决这个问题。

1 个答案:

答案 0 :(得分:3)

据我所知,没有现成的库可以执行此操作。但是,有一种简单的方法可以实现目标!

首先,我们需要知道 功能词 ,它们没有太多的语义含义,但对于语法和结构关系很重要。一些功能词是“of”,“about”,“my”等。有关详细信息,请参阅以下资源:

  1. The Wikipedia page on Function Words
  2. Function Words (pdf slides from New York Univ.)
  3. 维基百科页面还有一个外部链接,您可以从中下载英文功能词列表。

    获得该列表后,我们可以简单地使用普通的分词器,然后将一个单词 w_k 与以下单词 w_(k + 1)结合使用 w_k 是一个功能词。这种方法将取得以下结果:

    • “美利坚合众国”==> “联合国”,“国家”,“美国”
    • “哥谭的黑暗骑士”==> “黑暗”,“骑士”,“高谭”
    • “带戒指钥匙”==> “钥匙”,“带戒指”

    对于更复杂的单词分组,我们需要超越“分裂”,并冒险进入浅层分析领域。在这种情况下,特别是短语分块可能非常有用。例如,考虑一下美利坚合众国的资本,如上所述的单词分裂将产生“资本”,“联合”,“国家”,“美国”......这可能是不可取。另一方面,短语分块将产生

    [Capital]  [of]  [the United States]  [of]  [America]
    

    现在,我们可以将介词(如果需要)加入到后续短语中以获取

    [Capital] [of the United States] [of America]
    

    Univ的认知计算小组提供了一个好的短语分块程序。伊利诺伊州厄巴纳 - 香槟分校,包括online demo