Как построить чистый словарь из учебного текста? - PullRequest
0 голосов
/ 17 мая 2018

Я следую учебному пособию по нейронному машинному переводу здесь и замечаю, что наборы данных, которые они используют, предоставляют чистый вокаб файл .Но когда я сталкиваюсь с набором данных (например, Europarl v8 ), который не предоставляет файл вокаба, мне нужно самому создать словарь, используя следующую функцию.

def construct_vocab_from_file(file, vocab_file):
    # Read file, tokenize it and then sort it
    with open(file, 'r') as f:
        raw_data = f.read()
        tokens = nltk.wordpunct_tokenize(raw_data)
        words = [w.lower() for w in tokens]
        vocab = sorted(set(words))

    # Write vocab to file
    with open(vocab_file, 'w') as f:
        for w in vocab:
            f.write(w + "\n")

Однакословарь, построенный таким образом, выглядит немного грязно.enter image description here

Левый - из чистого файла Vocab, а правый с черным фоном (числа - номер строки) - из словаря, составленного мной.Это не заставляет меня чувствовать себя комфортно, особенно более половины словарного запаса состоит из таких специальных символов или цифр (например, 0, 00, 000, 0000, 0000003).

Итак, мои вопросы:

1) Это проблематично?

2) Должен ли я обработать это дальше и как?

1 Ответ

0 голосов
/ 17 мая 2018

Это зависит от используемой вами процедуры токенизации. Так как вы используете токенайзер wordpunct, который в основном видит в качестве токена все, что напоминает \w+|[^\w\s]+ (http://www.nltk.org/api/nltk.tokenize.html)), это то, что вы получаете. Наличие такого рода записей, заполняющих более половины вашего вокаба, звучит как много, но, очевидно, зависит от ваших входных данных.
Вы могли бы подумать об использовании более сложного токенизатора, но, учитывая, что записи такого типа, вероятно, будут иметь очень низкую частоту (т.е. большинство из них будут появляться в ваших данных только один раз, я думаю), я бы не стал беспокоиться об этом. много.

Так как вы используете материал Europarl; там также есть скрипт tokenizer (perl), который вы можете использовать для вывода токенизированного текста, так что при чтении его в python разделение на пробелы означает токенизацию. Не уверен, что токенизатор moses / europarl более или менее изощрен, чем Wordpunct от NLTK.

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