UnicodeEndcodeError utf8编码在PythoncfSuite(pycrfsuite)中

2024-10-02 04:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:我已经更新了我下面的回溯

我知道这种问题已经被问了很多次了,但是我已经为这个问题挣扎了2天,仍然没有找到解决办法。
这里的例子是:我使用pycrfsuite(CRF的python实现),这段代码引发了UnicodeEncodeError。在

 trainer = pycrfsuite.Trainer(verbose=True)
 for xseq, yseq in zip(X_train, y_train):
    trainer.append(xseq, yseq)

错误。。。在

^{pr2}$

\u201dutf8编码中的右双引号。此异常也针对\u201c左双引号)和\u2026省略号IIRC)引发

仅供参考,X_train和{}是文本及其相应标签的特征表示,我从文件中读取。我尝试过使用encoding='utf8', errors='ignore',但错误仍然存在

 for file in filelist:
        with open(self.datapath + "/" + file, "r", encoding='utf8', errors='ignore') as f:
            raw_text = [(line.strip("\n").strip(" ").replace("   ", " ").replace("  ", " ")).split(" ") for line in f.readlines() if line != '\n']
            data.extend(raw_text)  

我的问题是:pycrfsuite只支持ascii编码吗?如果是的话,有什么解决方法可以为我提供吗?我的数据是越南语的,ascii无法表示,一个新的crf库是我最不想要的

提前谢谢。在


Tags: in编码for错误linetrainutf8encoding
2条回答

for循环之前,可以对xseqyseq上的每个字符串元素使用encode('utf-8')方法。在

我的xseq中的一个元素现在看起来像这样[b'nxtletter=<\xc3\xad']

这是我的密码

def sent2features(data):
    return [extractFeatures(sent) for sent in data]

def sent2labels(data):
    return [extractLabels(sent) for sent in data]

X_train = sent2features(train_data)
Y_train = sent2labels(train_data)

for xseq, yseq in zip(X_train, Y_train):
    trainer.append(xseq, yseq)

extractFeaturesextractLabels函数上的编码行如下所示

^{pr2}$

也许对你有用。祝你好运!在

pycrfsuite文档没有提到它们对特性值和键的Unicode支持。 我也不能从示例中判断,因为我不清楚它们是python2还是python3。 另外,我对Cython的了解还不足以通过阅读资料给你一个明确的答案。在

无论如何,我建议你尝试两种方法:

  1. 在你把钥匙送到图书馆之前,你自己先把钥匙编码一下。如果值也是字符串,也要对它们进行编码。也许库很乐意接受bytes对象。

  2. 如果这不起作用(因为它确实想要ASCII),那么使用一些ASCII编码,例如使用urlencode或在字符串上调用Python的ascii()内置函数。后者将使用反斜杠转义符和引号将'can’t'编码为"'can\\u2019t'"。这并不重要,因为分类器不关心特征键的外观,只要相同的输入产生相同的特征键。

我希望这有帮助!在

相关问题 更多 >

    热门问题