我使用StanfordNLP来标记用智能手机编写的一组消息。这些文本有很多拼写错误,不尊重标点规则。 通常缺少影响标记化的空格。
例如,下面的句子错过了#34;加利福尼亚州的空白。这个"和#34;大学,成立"。
斯坦福大学位于加利福尼亚州。这所大学是一所伟大的大学,成立于1891年。
tokenizer返回:
{" Stanford"," University"," is","位于",""" ;," California.This" ," university",""," a",&#34 ;伟大","大学",",","成立","在", " 1891","。"}
如所观察到的那样,他们将所有代币分开,但是"加利福尼亚州。这个" (我希望有三个代币{"加利福尼亚""。""这"})。 我看了一下标记化规则,我观察到单词的正则表达式接受了单词中句子末尾使用的标点符号。
WORD = {LETTER}({LETTER} | {DIGIT})([。!] {LETTER}({LETTER} | {DIGIT}))*
我删除了最后一部分并重新编译,但令牌化程序仍然没有改变它的行为。
有人知道如何避免这种不受欢迎的行为吗? 或者有人,可以指出另一个与这类文本一起使用的标记器吗?
答案 0 :(得分:1)
我假设您指的是令牌化程序的.flex
文件?
在重新构建之前,您需要从此规范生成新的Java代码。使用flexeverything
Ant构建任务(请参阅我们的build spec)。
您可能还会发现Twokenize
有用。这是推文的自包含标记器。它是CMU Noah Smith小组TweetNLP package的一部分。 (请注意,此代码为GPL v2。)