StanfordNLP Tokenizer

Я использую StanfordNLP для токенизации набора сообщений, написанных на смартфонах. Эти тексты содержат много опечаток и не соответствуют правилам пунктуации. Очень часто отсутствуют пробелы, влияющие на токенизацию.

Например, следующие предложения пропускают пробелы в словах "California.This" и "University, Found".

Стэнфордский университет расположен в Калифорнии. Этот университет - великий университет, основанный в 1891 году.

Токенизатор возвращает:

{"Стэнфорд", "Университет", "есть", "расположен", "в", "Калифорния. Это", "университет", "есть", "а", "великий", "университет", ",", "found", "in", "1891", "."}

Как видно, они хорошо разделяют все токены, кроме "California.This" (я ожидаю иметь три токена {"California" "." This"}). Я взглянул на правила токенизации и заметил, что регулярное выражение для слов принимает знаки препинания, используемые в конце предложения в слове.

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

Я удалил последнюю часть и перекомпилировал, но токенизатор по-прежнему не меняет своего поведения.

У кого-нибудь есть идеи, как избежать этого нежелательного поведения? Или кто-то может указать мне другой токенизатор, который хорошо работает с этими типами текстов?

1 ответ

Решение

Я полагаю, вы имеете в виду .flex файл для токенизатора?

Вам нужно сгенерировать новый код Java из этой спецификации, прежде чем строить снова. Использовать flexeverything Задача сборки Ant (см. Нашу спецификацию сборки).


Вы также можете найти Twokenize полезно. Это автономный токенизатор для твитов. Это часть пакета TweetNLP от группы Ноа Смита в CMU. (Обратите внимание, что этот код GPL v2.)

Другие вопросы по тегам