python - FastText 将希伯来文本转换为不可读的编码 - 有什么方法可以转换回来?
问题描述
注意: 从那以后发现 .txt 文件本身已经以不可读的格式编码......有没有办法以可读格式读取 .txt 文件?
b'' b'\xd7\xa7\xd7\x90&\xd7\xa0\xd7\xa6\xd7\x9c\xd7\xa8\xd7\x99\xd7\xaa \xd7\x92\xd7\xa8\xd7\x9e\ xd7\xa0\xd7\x99\xd7\x94\xd7\x90\xd7\xa0\xd7\x92\xd7\x9c\xd7\x94\xd7\x9e\xd7\xa8\xd7\xa7\xd7\x9c\xd7\ x90\xd7\x9e\xd7\xa8 \xd7\x90\xd7\xaa\xd7\x9e\xd7\xa9\xd7\x95\xd7\xaa \xd7\x9e\xd7\xa4\xd7\x9c\xd7\x92\ xd7\x94\xd7\xa9\xd7\x99&\xd7\x9c\xd7\x98\xd7\x95\xd7\x9f \xd7\x93\xd7\xa6\xd7\x9e\xd7\x91\xd7\xa8'
我正在尝试使用 FastText 为希伯来语文本创建词嵌入。看起来 FastText 会自动将文本转换为不同的(不可读的)字符编码。有谁知道为什么会发生这种情况以及如何取消转换?
我在 Windows 计算机上使用 Python 3.5。已尝试将矢量化单词读取为“UTF-8”编码,但它仍然以不可读的格式出现。
model = fasttext.cbow('your_file.txt', 'model')
model.words # list of words in dictionary
向量是这样产生的:
{'': <gensim.models.keyedvectors.Vocab at 0x1ca3f6cc208>,
'8\\xd7\\x95\\xd7\\xa0\\xd7\\x99\\xd7\\x94': <gensim.models.keyedvectors.Vocab at 0x1ca3b2fbda0>,
'2.199': <gensim.models.keyedvectors.Vocab at 0x1ca3aadf470>,
'42381': <gensim.models.keyedvectors.Vocab at 0x1ca3b348160>,
'7648': <gensim.models.keyedvectors.Vocab at 0x1ca3b0b7208>,
'1.9841': <gensim.models.keyedvectors.Vocab at 0x1ca3afd8080>,
'7\\x91\\xd7\\x90"\\xd7\\x90': <gensim.models.keyedvectors.Vocab at 0x1ca3b313e80>,
"xa0\\xd7\\x92'\\xd7\\x99&\\xd7\\x9e\\xd7\\x99\\xd7\\x9f": <gensim.models.keyedvectors.Vocab at 0x1ca3ab7b7f0>,
'9e\\xd7\\x90\\xd7\\x9c': <gensim.models.keyedvectors.Vocab at 0x1ca3ad39748>,
"a4\\xd7\\x99'": <gensim.models.keyedvectors.Vocab at 0x1ca3a8e9b38>,
'\\x90\\xd7\\x95': <gensim.models.keyedvectors.Vocab at 0x1ca3ad7fe48>,
'3501': <gensim.models.keyedvectors.Vocab at 0x1ca3aa1fbe0>,
'7214': <gensim.models.keyedvectors.Vocab at 0x1ca3a798cf8>,
'87195': <gensim.models.keyedvectors.Vocab at 0x1ca3aab47b8>,
解决方案
从评论:
这是我从句子列表中创建 txt 文件的方式:
with open('your_file.txt', 'w') as f: for item in new_list: f.write("%s\n" % item.encode('utf8'))
这不起作用,将字节(的结果str.encode
)插入到字符串中隐式调用str
,bytes
导致
"b'mystring'\n"
请注意引号内的“b” - 写入文件的内容是字符串,而不是编码字节。
正确的方法是在打开文件时声明所需的编码,然后写入文本:
with open('your_file.txt', 'w', encoding='utf-8') as f:
for item in new_list:
f.write('%s\n' % item) # assuming item is already a str
或以二进制模式打开文件,并写入字节:
with open('your_file.txt', 'wb') as f:
for item in new_list:
f.write(('%s\n' % item).encode('utf-8')) # make the string, _then_ encode
如果使用-bstr
标志执行 Python,第一次调用bytes
实例时会发出警告;如果使用 -bb 标志,将引发异常。