You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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:
---&gt; 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:
-&gt; 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:56:08