摘要:
我试着对文本进行预处理,然后做分类或主题建模.问题是在预处理的时候,有一些编码问题我无法解决,编码真的是个麻烦的话题。
描述:
给定的字符串从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这样的方法可以绕过这个问题。寻找这样的参数,我可以通过更低的,但什么也没有出现。
发布于 2018-07-10 11:07:21
这两个b'\xcc\x87‘是较低的İ。如果你想摆脱它们,用它更新你的正则表达式:r'[^a-zıi̇öüşçğ.,\']'。i̇可能看起来像普通的较低的̇位--它不是(注意不在代码块中的双虚线模式)
这里有一张来自我的文本编辑器的不同变体的图片:无点的ı,无点的i̇和点,规则i

https://stackoverflow.com/questions/51263013
复制相似问题