Слово токенизация NLTK проблема аббревиатуры - PullRequest
0 голосов
/ 16 марта 2019

Я хочу знать, как слово токенизировать следующее предложение (строку):

"I am good. I e.g. wash the dishes."

В следующих словах:

["I", "am", "good", ".", "I", "e.g.", "wash", "the", "dishes"]

Теперь проблема в том, когда оно приходитк аббревиатурам вроде "e.g." он токенизируется NLTK word_tokenizer следующим образом ["e.g", "."]

Я попытался использовать punkt, обученный с "e.g.", для предложения токенизации первым, но я понял, что после того, как я произнес слово токенизация, я получутот же результат.

Любые мысли о том, как бы я достиг своей цели.

Примечание: я ограничен использованием NLTK.

1 Ответ

0 голосов
/ 17 марта 2019

Модуль NLTK regexp_tokenize разбивает строку на подстроки с помощью регулярного выражения.Можно определить регулярное выражение pattern, которое создаст токенизатор, соответствующий группам в этом шаблоне.Мы можем написать шаблон для вашего конкретного варианта использования, который ищет слова, сокращения (как в верхнем, так и в нижнем регистре) и такие символы, как '.', ';' и т. Д.

import nltk
sent = "I am good. I e.g. wash the dishes."
pattern = r'''(?x)          # set flag to allow verbose regexps
        (?:[A-Za-z]\.)+        # abbreviations(both upper and lower case, like "e.g.", "U.S.A.")
        | \w+(?:-\w+)*        # words with optional internal hyphens 
        | [][.,;"'?():_`-]    # these are separate tokens; includes ], [
    '''
nltk.regexp_tokenize(sent, pattern)
#Output:
['I', 'am', 'good', '.', 'I', 'e.g.', 'wash', 'the', 'dishes', '.']

Шаблон Regex для сокращенийэто (?:[A-Za-z]\.)+.\. соответствует "." в прямом поиске, содержащем символы AZ или az.

С другой стороны, полный стоп сопоставляется как независимый символ в следующем шаблоне, который не привязан к положительному или отрицательному прогнозу или содержанию в наборе алфавитов:

'[][.,;"'?():_`-]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...