Python 使用 Ftfy 修复 mojibake 问题

问题描述 投票:0回答:1

我导入的文本文件很少有 mojibake,因此我尝试使用 ftfy 库修复它们,然后再将它们提供给 Spacy (NLP)。与此问题相关的代码片段:

import spacy
import classy_classification
import pandas as pd
import ftfy


with open ('SID - Unknown.txt', "r", encoding="utf8") as k:
    Unknown = k.read().splitlines()

data = {}
data["Unknown"] = Unknown

# NLP model
spacy.util.fix_random_seed(0)
nlp = spacy.load("en_core_web_md")
nlp.add_pipe("text_categorizer", 
    config={
        "data": data,
        "model": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
        "cat_type": "multi-label",
        "device": "gpu"
    }
)

print(ftfy.fix_text(Unknown))

我收到错误:

属性错误:“列表”对象没有属性“查找”

当我根据此错误进行查找时,很多线程建议在列表的情况下使用index()而不是find()。但在本例中,查找是在 ftfy.fix_text 内完成的。我怎样才能解决这个错误?我希望它保持列表的形式,因为这就是我将其输入 Spacy 模型的方式。

python encode mojibake ftfy
1个回答
1
投票

正如您所注意到的,您的错误发生在

ftfy.fix_text
内。因此,当我们知道某个不是我们自己编写的函数出现问题时,我们接下来可以查看的是“我们在该函数中输入了什么?” .

就您而言,您将提供

Unknown
作为输入。
Unknown
是这样制作的:

with open ('SID - Unknown.txt', "r", encoding="utf8") as k:
    Unknown = k.read().splitlines()

这就是出问题的地方:Unknown 是一个字符串列表,但

ftfy.fix_text
函数需要一个字符串,因为您可以在here找到一些示例。

因此,您的问题的解决方案可以是:

  • 将所有行连接在一起形成 1 个字符串,用空格字符(或任何您想要的字符)分隔每行:
val singleString = ' '.join(Unknown)
print(ftfy.fix_text(singleString))
  • 打印每行不同行的
    ftfy.fix_text
    的输出:
for line in Unknown:
  print(ftfy.fix_text(line))
© www.soinside.com 2019 - 2024. All rights reserved.