使用flair pos-english模型处理文本文件遇AttributeError问题求助
问题:Flair词性标注模型批量处理文本文件报错
我想用pos-english-fast模型做句子词性标注,单句测试时模型能正常识别词性标签,但把所有句子存入data1.txt文件后,批量标注时出现错误。
我的代码
from flair.models import SequenceTagger model = SequenceTagger.load("flair/pos-english") #Read the data from the data.txt with open('data1.txt') as f: data = f.read().splitlines() #Create a list of sentences from the data sentences = [sentence.split() for sentence in data] #Tag each sentence using the model tagged_sentences = [] for sentence in sentences: tagged_sentences.append(model.predict(sentence)) for sentence in tagged_sentences: print(sentence)
收到的错误
AttributeError Traceback (most recent call last) <ipython-input-16-03268ee0d9c9> in <cell line: 10>() 9 tagged_sentences = [] 10 for sentence in sentences: ---> 11 tagged_sentences.append(model.predict(sentence)) 12 for sentence in tagged_sentences: 13 print(sentence) 1 frames /usr/local/lib/python3.10/dist-packages/flair/data.py in set_context_for_sentences(cls, sentences) 1116 previous_sentence = None 1117 for sentence in sentences: -> 1118 if sentence.is_context_set(): 1119 continue 1120 sentence._previous_sentence = previous_sentence AttributeError: 'str' object has no attribute 'is_context_set'
错误截图

解决方案
问题原因
Flair的model.predict()方法要求传入的是Flair内置的Sentence对象,而非字符串或字符串列表。你代码中用sentence.split()把每行文本拆成了字符串列表,直接传入predict导致类型不匹配报错。
修复后的代码
需要先导入Flair的Sentence类,将每行文本转换为Sentence对象后再传入模型:
from flair.models import SequenceTagger from flair.data import Sentence model = SequenceTagger.load("flair/pos-english") # 读取文件中的每一行文本 with open('data1.txt') as f: data = f.read().splitlines() # 将原始文本行转换为Flair要求的Sentence对象 sentences = [Sentence(line) for line in data] # 批量标注所有句子(批量处理比循环单个标注效率更高) model.predict(sentences) # 打印带词性标签的结果 for sentence in sentences: print(sentence.to_tagged_string())
补充说明
Sentence(line)会自动处理文本的分词和结构转换,无需手动拆分字符串。- 批量传入
sentences列表给model.predict()是Flair推荐的高效处理方式,内部会优化计算流程。 - 若需要获取更详细的标签信息(如标签得分、位置),可以使用
sentence.get_labels()方法遍历每个Token的标签。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

