我有一些ISO-2022-JP编码文本。
实施例。 : まだ正式に决まったわけではないので。
根据re库文档,它可以同时接受ascii和unicode,所以我尝试将我的文本转换为unicode并切换到单词级别:
text.decode('iso-2022-jp')
print(text)
print(re.findall(r"[\w']+", text))
但是,这是我得到的输出类型:
まだ 正式 に 決まっ た わけ で は ない の で 。
['B', 'B', 'B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']
我做错了什么? 谢谢!
答案 0 :(得分:0)
您的代码适合我。 (Python 3.3.0)
>>> text = "まだ 正式 に 決まっ た わけ で は ない の で 。"
>>> print(text)
まだ 正式 に 決まっ た わけ で は ない の で 。
>>> import re
>>> re.findall(r"[\w']+", text)
['まだ', '正式', 'に', '決まっ', 'た', 'わけ', 'で', 'は', 'ない', 'の', 'で']
顺便说一句,你没有将解码后的字符串分配给文本。
text = text.decode('iso-2022-jp')
<强>更新强>
如果我将文本解码为ascii(丢弃非ascii字符),我会得到以下结果。
>>> re.findall(r"[\w']+", text.encode('iso-2022-jp').decode('ascii', 'ignore'))
['B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']
好像你解码/编码不正确。
<强> UPDATE2 强>
如果您从文件中读取文本,则无需解码单个行。在open()
调用中指定编码。
import re
with open('results', 'r', encoding='iso-2022-jp') as f:
for line in f:
matches = re.findall(r"[\w']+", line)
if matches:
print(matches)