首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件读取未正确编码的文本,缺少空格,字符错误

从文件读取未正确编码的文本,缺少空格,字符错误
EN

Stack Overflow用户
提问于 2019-05-24 15:27:07
回答 1查看 117关注 0票数 0

我正在清理.txt文件的文本。然而,在阅读文件后,我发现文本缺少空格,只有一些单词之间有错误的字符。

我使用的是Python 3,文本是越南语。

代码语言:javascript
复制
Orignial text: "vui lòng cởi đồ ra tôi muốn nghe khám bệnh"
代码语言:javascript
复制
In[1]: with open('test.txt') as f:
          read_text = f.read()
       read_text
Out[1] vui lòng cởi đô`ra tôi muốn nghe khám bệnh

仔细看看"đồra“->”đóra". A character "ồ" became two characters: "ô" and "“。

当我使用re删除所有特殊字符时

代码语言:javascript
复制
In[2]: import re
       read_text = re.sub('\W+',' ',read_text)
       read_text
Out[2]: vui lo ng cơ i đô ra tôi muô n nghe kha m bê nh

结果应该与原始结果相同,但不是。怎么啦?

EN

回答 1

Stack Overflow用户

发布于 2019-06-18 00:10:00

问题不在Python语言中-问题是您所指向的特定字符,可能还有其他字符,有两个组合变音符号。问题是,并不是所有的文本处理应用程序都能处理这个问题。我自己使用的是基于Qt的终端,粘贴问题中的第一个字符串只是简单地“删除”了第二个发音符号-- "`“标记,只留下了”Don.“。(不过,基于GTK+的终端可以正确地处理它)。

所以问题是Python提供的unicode字符串是正确的。但是,您使用的终端应用程序无法正确处理它,并将两个变音符号放在同一个字符上。

过滤掉unicode字符之外的变音符号几乎从来都不是“正确的做法”。如果你的应用程序要支持越南语文本,它应该正确地这样做,而不是静默地转换一些字符。

对于“基于西方的”语言,字母通常会有一个变音符号,这是相当容易的-不仅终端和输出库支持,然后很好,而且,通常所有字符都由一个unicode代码点表示。

然而,当一个人移动到每个字符需要更多的变音符号时,您就失去了“字符串中的一个字符”等于“屏幕上的一个字符”的等价性(不管输出是否正确)。然后你必须在你的代码中担心这一点。

如果您只是为了搜索而对事物进行索引,甚至是为了训练而对文本语料库进行索引,那么剥离变音符号可能是可以的,但是,然后,您可能应该剥离所有的变音符号。

这样做的方法是强制字符串进入规范化的Unicode表示,其中所有变音符号都表示为单独的“组合字符”,而不是组合字符,然后只过滤掉字母字符;

代码语言:javascript
复制
import unicodedata
a = "vui lòng cởi đồ ra tôi muốn nghe khám bệnh"

# Normalize the internal representation:
b = unicodedata.normalize("NFKD", a)
print(*(c for c in b), sep=" ")
# outputs: "v u i   l o ̀ n g   c o ̛ ̉ i   đ o ̂ ̀   r a   t o ̂ i   m u o ̂ ́ n   n g h e   k h a ́ m   b e ̣ ̂ n h"

# recreates the string filtering out combining characters:
c = "".join(c for c in b if unicodedata.category(c) != "Mn")
print(c)
# outputs: 'vui long coi đo ra toi muon nghe kham benh'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56287740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档