【问题标题】:Word Tokenization using Stanford NLP使用斯坦福 NLP 的词标记化
【发布时间】:2015-09-12 12:29:39
【问题描述】:

我正在使用 Stanford-NLP Java 库。我发现它在处理将句子词干、词形还原和标记化为单词时最准确。

我的要求也是对单词进行标记,例如“leatherjacket”可以正确解释并吐出为“leatherjack”。在这个级别,我不处理拼写更正,但如果可能的话,请告诉我。

【问题讨论】:

    标签: java nlp stanford-nlp


    【解决方案1】:

    这是一个复杂的问题,因为您假设您正在对单词进行标记,而不是在标记/原始语言单元上。维基百科将标记化描述为:

    在词法分析中,分词是分流的过程 将文本转化为单词、短语、符号或其他有意义的元素 称为令牌。

    PTBTokenizer(CoreNLPs Primary Tokenizer)在粗略的单词上进行拆分,而不是实际的单词。因此下面的句子将产生 6 个标记。

    我有一件很酷的皮夹克

    ['我','有','a','真的','酷','皮夹克']

    了解标记化不会像您想的那样安静,我可以推荐一个解决方案作为标记化过程的先导。谷歌的Peter Norvig 共同撰写了臭名昭著的Artifical Intelligence: A Modern approach,他讨论了他的玩具(概率/判别)算法,该算法达到了 80% - 90% 的准确率。 implementation he published is in Python,但已移植到可能适合您需要的其他语言。 Rael GC 用 Ja​​va 实现了一个 42 行的解决方案,这在 his website 上令人印象深刻。

    或者,您可以创建自己的标记器,它更进一步,是某种混合拼写校正器/标记器。然而,这将是非常困难/乏味的,并且由于新颖性而值得出版。但简短的回答,这里没有金子弹。

    【讨论】:

    • 感谢您的建议!目前我正在使用 PTBTokenizer,它就像你提到的那样工作。您共享的链接虽然很好读。我正在尝试进一步挖掘有关编写自己的分词器或词标记器和拼写校正器的信息。
    【解决方案2】:

    我不确定我们现在有什么可以做到这一点。但我个人之前曾研究过这个问题,将这样的组件添加到斯坦福 CoreNLP 中可能会很有趣。

    我的简单方法基本上是:

    1. 构建一个包含合理频繁词的字典(来自维基百科?)(您希望字典中包含“皮革”和“夹克”,而不是“皮革夹克”)

    2. 对于给定的单词,生成拆分候选,每个单词的大小最小(您想将“leatherjacket”拆分为“leather”和“jacket”,您不想将“apolitical”拆分为“a”和“政治”)

    3. 计算你拼在一起的单词和二元组的比例

      (“皮革”“夹克”的出现次数)/(“皮革夹克”的出现次数)

      如果这个比例超过一定的阈值,将“leatherjacket”替换为“leather”“jacket”

    4. 我生成了一长串拼凑在一起的示例,并根据我的训练数据调整了阈值。

    【讨论】:

    • 感谢您的回复。我试图找到一种算法,它以最小的复杂性为我提供所需的功能,并了解传统的动态编程 (O(n^2))。我想试一试。再次感谢您提到这个技巧。
    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多