FastText将希伯来语文本转换为不可读的编码-是否可以转换回原样?

时间:2019-04-22 12:37:26

标签: python character-encoding fasttext

注意: 从那以后,发现.txt文件本身已经以不可读的格式编码了吗?是否有任何方法可以以可读的格式读取.txt文件?

b''b'\ xd7 \ xa7 \ xd7 \ x90&\ xd7 \ xa0 \ xd7 \ xa6 \ xd7 \ x9c \ xd7 \ xa8 \ xd7 \ x99 \ xd7 \ xaa \ xd7 \ x92 \ 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 \ x97 \ xd7 \ x90 \ xd7 \ x9e \ xd7 \ xa8 \ xd7 \ x90 \ xd7 \ xaa \ xd7 \ x9e \ xd7 \ xa9 \ xd7 \ x95 \ xd7 \ xaa \ xd7 \ x9e \ xd7 \ 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 \ xa7 '

我正在尝试使用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>,

1 个答案:

答案 0 :(得分:0)

来自评论:

这是我从句子列表中创建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” -写入文件的是字符串,而不是编码的字节。

正确的方法是在打开文件时声明所需的编码,然后编写 text

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

或以二进制模式打开文件,并写入 bytes

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

如果您使用-b标志执行Python,则第一次在str实例上调用bytes时将发出警告;如果使用-bb标志,则会引发异常。