Просторный токенизированный апостроф - PullRequest
2 голосов
/ 15 марта 2019

Я пытаюсь правильно разделить слова, чтобы соответствовать моему корпусу. Для этого я уже нашел следующее:

Специальный пользовательский токенайзер, включающий в качестве токенов только дефисные слова с использованием Infix regex

Что фиксирует дефисные слова, но я не могу понять, как сохранить слова с апострофами для сокращений вроде: не могу, не буду, нет, он и т. Д. вместе как один знак в просторе. Более конкретно, я ищу, как это сделать для голландских слов: zo'n, auto's, massa и т. Д., Но эта проблема должна быть независимой от языка.

У меня есть следующий токенизатор:

def custom_tokenizer(nlp):
    prefix_re = compile_prefix_regex(nlp.Defaults.prefixes)
    suffix_re = compile_suffix_regex(nlp.Defaults.suffixes)
    infix_re = re.compile(r'''[.\,\?\:\;\...\‘\’\'\`\“\”\"\'~]''')

    return Tokenizer(nlp.vocab, prefix_search=prefix_re.search,
                     suffix_search=suffix_re.search,
                     infix_finditer=infix_re.finditer,
                     token_match=None)
nlp = spacy.load('nl_core_news_sm')
nlp.tokenizer = custom_tokenizer(nlp)

с этим токены:

'Mijn', 'собственный', 'Huis', 'Staat', зо ", "'", 'п' , 'ЗЭС', 'метр', 'Onder',' гет», 'wateroppervlak', 'ван', 'де', 'Noordzee', ''.

и токены должны быть:

'Mijn', 'собственный', 'Huis', 'Staat', "zo'n" , 'ЗЭС', 'метр', 'Onder', 'гет', 'wateroppervlak' 'ван', 'де', 'Noordzee', ''

Я знаю, что можно добавить пользовательские правила, такие как:

case = [{ORTH: "zo"}, {ORTH: "'n", LEMMA: "een"}]
tokenizer.add_special_case("zo'n",case)

Но я ищу более общее решение.

Я пытался отредактировать регулярное выражение infix_re из другого потока, но, похоже, я не имею никакого влияния на проблему. Есть ли какие-либо настройки или изменения, которые я могу сделать, чтобы это исправить? Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 16 марта 2019

В spaCy имеется очень недавняя работа в прогрессе для исправления лексических форм этого типа для голландского языка. Более подробная информация в сегодняшнем запросе на поставку: https://github.com/explosion/spaCy/pull/3409

В частности, nl/punctuation.py (https://github.com/explosion/spaCy/pull/3409/files#diff-84f02ed25ff9e44641672ca0ba5c1839) показывает, как это можно решить путем изменения суффиксов:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...