【问题标题】:Python error: TypeError: Expected string or bytes-like objectPython 错误:TypeError:预期的字符串或类似字节的对象
【发布时间】:2020-03-17 13:14:34
【问题描述】:

我目前正在使用 python 中的 nltk 进行情绪分析项目。我无法让我的脚本从我的 csv 中传递文本行来执行标记化。但是,如果我一次在一个条目中传递文本,它就可以正常工作。当我尝试传入整个 csv 时,我收到一个持久性错误:“TypeError:预期的字符串或类似字节的对象”。 这是我正在使用的打印数据框和 python 代码。解决这个问题的任何帮助都会很棒。

                              abstract
0    Allergic diseases are often triggered by envir...
1    omal lymphopoietin (TSLP) has important roles ...
2    of atrial premature beats, and a TSLP was high...
3     deposition may play an important role in the ...
4    ted by TsPLP was higher than that mediated by ...
5    nal Stat5 transcription factor in that TSLP st...
data = pd.read_csv('text.csv', sep=';', encoding = 'utf-8')
x = data.loc[:, 'abstract']
print(x.head())
tokens = nltk.word_tokenize(x)
print(tokens)

附加的是完整的堆栈跟踪错误。 编辑:打印声明

编辑:输出

【问题讨论】:

  • 哪一行给你这个错误?
  • 请使用完整的 Traceback 消息更新您的问题。
  • tokens = nltk.word_tokenize(x) 是错误的原因。这里x是一个df。您必须在 nltk.word_tokenize() 函数中传递 String。您可以做的一件事是,您可以遍历 x 并在 nltk.word_tokenize() 中传递每一行字符串
  • @0buz 抱歉应该澄清的是这一行:tokens = nltk.word_tokenize(x)
  • @quamrana 我已经更新了问题,并提供了指向完整堆栈跟踪错误的链接

标签: python nltk typeerror sentiment-analysis nltokenizer


【解决方案1】:

tokens = [nltk.word_tokenize(line) for line in x ]

【讨论】:

  • 感谢这工作!所以输入文本是 csv 格式的,所以每个单元格有一个文本,那么我怎样才能确保这个输出是按单元格打印的,而不仅仅是一个文本块?
  • 我不明白。如果你写出预期的输出我可以看看。
  • csv 文件中有多个条目,您建议的脚本将它们标记化,但是输出打印为一个没有分隔符的文本块。如果我可以像这样返回 csv 中的每个文本单元格,这将非常有帮助:“过敏”、“疾病”、“是”、“经常”、“触发”、“由”、“环境”、“过敏原” ', '那个', '诱导', '显性', '类型', '2', '免疫', '反应', ',', '表征', 'by', 'the', '渗透', 'T-helper', 'type', '2', '(', 'TH2', ')', 'lymphocytes', ',', 'eosinophils'] 然后是下一个条目,以此类推 清晰的分色
  • 您可以关注@0buz 的回答。将这些行连接成一个大文本,然后标记化
  • 我认为我建议的解决方案必须将每个单元格内容分开返回。 e. G 。 [ [first cell tokens],[second cel token], [third cell token][...],.,.,]
【解决方案2】:

nltk documentation 给出了nltk.word_tokenize 用法的示例,您可能会注意到“句子”是string

在您的情况下,x 是一个数据帧Series(字符串),您需要先将其重构为字符串,然后再将其传递给nltk.word_tokenize

解决此问题的一种方法是从x 创建您的nltk“句子”:

x = data.loc[:, 'abstract']
sentence=' '.join(x)
tokens = nltk.word_tokenize(sentence)

编辑: 根据进一步的 cmets 尝试此操作(请记住,这将是要相应访问的令牌的 Series):

tokens=x.apply(lambda sentence: nltk.word_tokenize(sentence))

【讨论】:

  • 那么你想要每个抽象单元格有一组标记吗?
  • 在它被标记化后是否有将其解构回一系列字符串?谢谢
  • 是的,那就太完美了!
  • 请查看我的编辑并告诉我进展如何。
  • 刚刚尝试了您的编辑,它可以正常工作,但奇怪的是只有文本的一半。对这些细胞的表型分析表明,它们处于前 B 细胞分化阶段并表达在 IL-7 中培养的前 B 细胞特征的细胞表面标志物。 TSLP 可以取代 IL-7 的活性,以支持 B 淋巴细胞从未定型双电位前体的进展。在没有 TSLP 或 IL-7 的情况下,产生成熟 B 淋巴细胞的细胞后代不能从这些双潜能前体发育而来。 [To, 检查, the, role, of, gamma, c, in,] ...
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 2020-11-09
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多