Как создать корпус с POS-тегами с помощью NLTK?

Я пытаюсь создать корпус с POS-тегами из внешних файлов .txt для фрагментации и извлечения сущностей и отношений. До сих пор я нашел громоздкое многошаговое решение:

  1. Чтение файлов с помощью простого текстового корпуса:

    from nltk.corpus.reader import PlaintextCorpusReader
    my_corp = PlaintextCorpusReader(".", r".*\.txt")
    
  2. Корпус тегов со встроенным POS-теггером Penn:

    my_tagged_corp= nltk.batch_pos_tag(my_corp.sents())
    

(Кстати, на этом понте Питон выдал ошибку: NameError: name 'batch' is not defined)

  1. Запишите отмеченные предложения в файл:

    taggedfile = open("output.txt" , "w")
    for sent in dd_tagged:
        line = " ".join( w+"/"+t for (w, t) in sent )
    taggedfile.write(line + "\n")
    taggedfile.close ()
    
  2. И, наконец, снова прочитайте этот вывод как помеченный корпус:

    from nltk.corpus.reader import TaggedCorpusReader
    my_corpus2 = TaggedCorpusReader(".",r"output.txt")
    

Все это очень неудобно для довольно распространенной задачи (чанкинг всегда требует размеченного корпуса). Мой вопрос: есть ли более компактный и элегантный способ реализовать это? Например, программа для чтения корпусов, которая одновременно получает необработанные входные файлы и тегировщик?


person Hendrik    schedule 24.06.2016    source источник
comment
на этом этапе Python выдал ошибку, так что вышеописанное не завершилось? или как вы получили вывод?   -  person patrick    schedule 16.03.2017
comment
@hendrik: я столкнулся с проблемой при создании корпуса с тегами POS. Я мог бы запустить код Python из вашего шага 4, но я хочу импортировать свой корпус из папки nltk_data/corpora. Не могли бы вы подробно описать этапы его создания?   -  person Aditi    schedule 26.09.2017


Ответы (1)


У меня есть рабочее решение для этого: Пожалуйста, обратитесь к link для шага пошаговая процедура.

Загрузите необходимые файлы с здесь.

После выполнения команд из 1 будет создан файл рассола, и это ваш помеченный корпус.

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

import nltk.data
tagger = nltk.data.load("taggers/NAME_OF_TAGGER.pickle")
tagger.tag(['some', 'words', 'in', 'a', 'sentence'])
person Aditi    schedule 27.09.2017