Как загрузить документ вместо строки в Stanford's Stanza (StanfordNLP)?
Я использую Stanford Stanza, но не могу найти никакой документации о том, как загрузить документ вместо строки.
Например, для строки это работает так:
nlp_pos = stanza.Pipeline('it',processors='tokenize,mwt,pos,lemma,depparse')
doc = nlp_pos("hello how are you")
Для документа я подумал, что это будет примерно так:
nlp_pos = stanza.Pipeline('it',processors='tokenize,mwt,pos,lemma,depparse')
filename = "example.txt"
with open(filename, 'r') as f:
doc = f.read()
Но не работает. Какая альтернатива?
2 ответа
Вот пример, слегка адаптированный из документации Stanza. Я создал дескриптор файла, который передал в doc = nlp(....). Внимание: я пишу не в исходный файл (Stanza_No_Tags.txt), а в новый файл (Stanza_Tokenized.txt). YMMV.
nlp = stanza.Pipeline(lang='zh', processors='tokenize')
Stanza_doc_open = open('Stanza_No_Tags.txt', 'r').read()
doc = nlp(Stanza_doc_open)
for i, sentence in doc.sentences:
print(f'====== Sentence {i+1} =======', file=open('Stanza_Tokenized.txt', 'a'))
Ответ @fpohlmann должен работать, но не закрывает дескриптор файла.
С минимальными изменениями в исходном фрагменте кода можно обработать файл
nlp_pos = stanza.Pipeline('it',processors='tokenize,mwt,pos,lemma,depparse')
filename = "example.txt"
with open(filename, 'r') as f:
doc = nlp_pos(f.read())
И получить доступ к информации аннотации так же, как если бы вы doc
объект из обработки строки. Фактически этот фрагмент просто считывает все содержимое этого файла в строку и передает ее в строфу.