字符串中不需要的字节

时间:2018-07-10 10:34:07

标签: python python-3.x encoding utf-8

摘要:

我正在尝试对文本进行预处理,然后再进行分类或主题建模。问题在于预处理时,编码存在一些我无法解决的问题,编码确实是一个麻烦的话题。

说明:

给定的字符串来自excel文件,

s = "  GEÇİCİ  \n\t"

现在,当我尝试对该字符串进行一些替换和标记化处理时,我会遇到字符串变成的问题,

print(re.sub(r'[^a-zıöüşçğ.,\']', ' ', s.lower()))
# '  geçi ci     '

结果不应该这样分开,它破坏了我的令牌化过程。然后我尝试了不区分大小写的方法,效果很好。

print(re.sub(r'[^a-zıöüşçğ.,\']', ' ', s, flags=re.I).lower())
# '  geçi̇ci̇    '

现在要了解出了什么问题,我尝试将原始字符串编码为“ utf-8”,这很好,

print(s.encode("utf-8"))
# b'  GE\xc3\x87\xc4\xb0C\xc4\xb0  \n\t'

但是当我尝试使用lower()之后对其进行编码时,问题就出在这里,

print(s.lower().encode("utf-8"))
# b'  ge\xc3\xa7i\xcc\x87ci\xcc\x87  \n\t'

与预期结果进行比较

print("geçici".encode("utf-8"))
# b'ge\xc3\xa7ici'

问题:

这两个 b'\ xcc \ x87'来自哪里?

我记得在C#中遇到过类似的问题。像ToLowerInvariant这样的方法绕过了这样的问题。寻找这样的参数,我可以将其传递到更低的位置,但是什么也没出现。

1 个答案:

答案 0 :(得分:0)

这两个b'\ xcc \ x87'低İ。如果要摆脱它们,请使用r'[^a-zıi̇öüşçğ.,\']'更新它的正则表达式。 i̇看起来像不是常规的i低位(请注意,如果不在代码块中,请注意双点划线模式)

这里是我的文本编辑器中不同变体的图片:无点ı,带点的无点i̇,常规i

variant of i