如何在斯坦福节(StanfordNLP)中加载文档而不是字符串?

2024-06-01 00:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Stanford的节,但是我找不到任何关于如何加载文档而不是字符串的文档

例如,对于字符串,它的工作方式如下:

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()

但它不起作用。什么是替代方案


Tags: 字符串文档posdocnlppipelineitfilename
2条回答

@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对象的方式相同。实际上,这个代码段只是将该文件的全部内容读入一个字符串,并将其传递到节中

下面是一个示例,稍微改编自小节文档。我创建了一个文件句柄,并将其传递给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'))

相关问题 更多 >