【问题标题】:Filtering text encoded with utf-8 to only contain latin alphabet characters过滤使用 utf-8 编码的文本以仅包含拉丁字母字符
【发布时间】:2017-09-05 15:56:17
【问题描述】:

我正在尝试过滤 textdata 以仅包含拉丁字符,以进行进一步的文本分析。原始文本源很可能包含韩语字母。这在文本文件中显示如下:

\xe7\xac\xac8\xe4\xbd\x8d ONE PIECE FILM GOLD Blu-ray GOLDEN LIMITED EDITION

删除这些最快/最简单/最完整的方法是什么?我尝试制作一个可以删除所有 \xXX 组合的脚本,但事实证明这有很多例外情况。

有没有办法从 utf-8 编码文本中删除所有非拉丁字符?

提前致谢。

解决方案:

import string

textin = b'\xe7\xac\xac8\xe4\xbd\x8d ONE PIECE FILM GOLD Blu-ray GOLDEN LIMITED EDITION'.decode('UTF-8')
outtext = ''

for char in textin:
    if char in string.printable:
        outtext += char

print(outtext)

我的数据由于某种原因被解码为比特,不要问我为什么。 :D

【问题讨论】:

  • “非拉丁语”还是“非 ASCII”?
  • s.decode('utf-8').encode('latin1', 'ignore').decode('latin1').
  • 这是中文,不是韩文。

标签: python encoding utf-8


【解决方案1】:

这个呢:

import string

intext = b'<your funny characters>'
outtext = ''

for char in intext.decode('utf-8'):
    if char in string.ascii_letters:
        outtext += char

我不确定这是否是您想要的。对于给定的 intext,outtext 为空。如果将 string.digits 附加到 string.ascii_letters,则输出文本为 '11'。

(已编辑以修复代码中的错误,由 OP 指出)

【讨论】:

  • 谢谢 bart,不过有个小问题,text.decode() 中的文本应该是 intext 对吗?否则我不知道它指的是什么。我将尝试详细说明我的问题。我有很多文本数据,最初是用 utf-8 编码的。从文件中加载我的数据时,即使指定了编码,它仍然会以上述奇怪的文本结束。我在文本编码方面的经验为 0,但必须有一种方法可以扭转这种情况,然后过滤掉非拉丁(非 ascii?)字符?
  • 没关系,我发现了问题所在。我编辑了顶帖
  • 是的,我的代码中的错误是正确的。我修好了,对不起。是由于最后一刻的变化。 :-/ 很高兴看到您根据我的建议找到了解决方案。 :-)
【解决方案2】:

在读取 csv 文件时,尝试编码为:

df=pd.read_csv('D:/sample.csv',encoding="utf-8-sig")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2011-08-16
    • 2016-05-19
    • 2014-06-09
    • 2021-12-10
    相关资源
    最近更新 更多