StanfordNLP 分词器

StanfordNLP Tokenizer

我使用 StanfordNLP 对一组用智能手机编写的消息进行标记。这些文本有很多拼写错误,并且不遵守标点符号规则。 经常缺少空格会影响标记化。

例如,下面的句子漏掉了"California.This"和"university,founded"中的空格。

斯坦福大学位于California.This大学是一所伟大的大学,成立于1891年

分词器 returns:

{"Stanford", "University", "is", "located", "in", "California.This", "university", "is", "a", "great", "university", ",", "founded", "in", "1891", "."}

正如观察到的那样,他们很好地拆分了所有标记,但 "California.This"(我希望有三个标记 {"California"“。”"this"})。 我查看了标记化规则,发现单词的正则表达式接受单词中用于句子结尾的标点符号。

WORD = {LETTER}({LETTER}|{DIGIT})([.!?]{LETTER}({LETTER}|{DIGIT}))*

我删除了最后一部分并重新编译,但分词器仍然没有改变它的行为。

有人知道如何避免这种不受欢迎的行为吗? 或者有人可以告诉我另一个适用于此类文本的分词器吗?

我假设您指的是分词器的 .flex 文件?

您需要根据此规范生成新的 Java 代码,然后才能再次构建。使用 flexeverything Ant 构建任务(参见我们的 build spec)。


您还可以从 CMU 的 Noah Smith 小组中找到 Twokenize useful. This is a self-contained tokenizer for tweets. It's part of the TweetNLP package。 (请注意,此代码是 GPL v2。)