从节文档/句子中的token和word对象中获取数据



我在一些(意大利语)文本上使用Stanford STANZA管道。

我正在努力解决的问题是我需要Token和Word对象的数据。

虽然我能够单独访问其中一个或另一个,但我并没有考虑如何在Document的单个循环中从两者获取数据->句话

具体来说,我需要一些Word数据(如引理,上部和头部),但我也需要知道相应的开始和结束位置,在我的理解中,我可以在令牌中找到。Start_char和token.end_char.

下面是我的代码来测试我所取得的成果:

import stanza
IN_TXT = '''Il paziente Rossi e' stato ricoverato presso il nostro reparto a seguito di accesso
al pronto soccorso con diagnosi sospetta di aneurisma aorta
addominale sottorenale. In data 12/11/2022 e' stato sottoposto ad asportazione dell'aneurisma
con anastomosi aorto aortica con protesi in dacron da 20mm. Paziente dimesso in data odierna in 
condizioni stabili.'''
stanza.download('it', verbose=False)
it_nlp = stanza.Pipeline('it', processors='tokenize,lemma,pos,depparse,ner',
verbose=False, use_gpu=False)
it_doc = it_nlp(IN_TXT)
# iterate through the Token objects
T = 0
for token in it_doc.iter_tokens():
T += 1
token_id = 'T' + str((T))
token_start = token.start_char
token_end = token.end_char
token_text = token.text
print(f"{token_id}t{token_start} {token_end} {token_text}")
# iterate through Word objects
print(*[f'word: {word.text}tttupos: {word.upos}txpos: {word.xpos}tfeats: {word.feats if word.feats else "_"}' for sent in it_doc.sentences for word in sent.words], sep='n')

以下是这些对象的文档:https://stanfordnlp.github.io/stanza/data_objects.html

我刚刚发现了Python 3中返回元组迭代器的zip函数。

因此,要并行迭代一个句子的Words和Tokens,可以编写:

for sentence in it_doc.sentences:
for t, w in zip(sentence.tokens, sentence.words):
print(f"Text->{w.text}tLemma->{w.lemma}tStart->{t.start_char}tStop->{t.end_char}")

相关内容

  • 没有找到相关文章

最新更新