摘要:
我正在尝试对文本进行预处理,然后再进行分类或主题建模。问题在于预处理时,编码存在一些我无法解决的问题,编码确实是一个麻烦的话题。
说明:
给定的字符串来自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
这样的方法绕过了这样的问题。寻找这样的参数,我可以将其传递到更低的位置,但是什么也没出现。