Я на Windows OS10, использую python 2.7.15 | Anaconda. Всякий раз, когда я бегу
mymodel=gensim.models.Word2Vec.load (pretrain)
mymodel.min_count = mincount
sentences =gensim.models.word2vec.LineSentence('ontology_corpus.lst')
mymodel.build_vocab(sentences, update=True) # ERROR HERE ****
Я получаю эту ошибку:
Traceback (most recent call last):
File "runWord2Vec.py", line 23, in <module>
mymodel.build_vocab(sentences, update=True)
File "C:xxxx\lib\site-packages\gensim\models\ba
se_any2vec.py", line 936, in build_vocab
sentences=sentences, corpus_file=corpus_file, progress_per=progress_per, tri
m_rule=trim_rule)
File "C:xxxx\lib\site-packages\gensim\models\wo
rd2vec.py", line 1591, in scan_vocab
total_words, corpus_count = self._scan_vocab(sentences, progress_per, trim_r
ule)
File "C:xxxxx\lib\site-packages\gensim\models\wo
rd2vec.py", line 1560, in _scan_vocab
for sentence_no, sentence in enumerate(sentences):
File "C:xxxx\lib\site-packages\gensim\models\wo
rd2vec.py", line 1442, in __iter__
line = utils.to_unicode(line).split()
File "C:xxxx\lib\site-packages\gensim\utils.py"
, line 359, in any2unicode
return unicode(text, encoding, errors=errors)
File "C:xxxxx\lib\encodings\utf_8.py", line 16,
in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe6 in position 124: invalid
continuation byte
Теперь это восходит к этому классу LineSentence
class LineSentence(object):
def __init__(self, source, max_sentence_length=MAX_WORDS_IN_BATCH, limit=None):
self.source = source
self.max_sentence_length = max_sentence_length
self.limit = limit
def __iter__(self):
"""Iterate through the lines in the source."""
try:
# Assume it is a file-like object and try treating it as such
# Things that don't have seek will trigger an exception
self.source.seek(0)
for line in itertools.islice(self.source, self.limit):
line = utils.to_unicode(line).split()
i = 0
while i < len(line):
yield line[i: i + self.max_sentence_length]
i += self.max_sentence_length
except AttributeError:
# If it didn't work like a file, use it as a string filename
with utils.smart_open(self.source) as fin:
for line in itertools.islice(fin, self.limit):
line = utils.to_unicode(line).split() # ERROR HERE *************
i = 0
while i < len(line):
yield line[i: i + self.max_sentence_length]
i += self.max_sentence_length
В последнем возвращении, которое видно из ошибки, я могу просто изменить параметр ошибки на error = 'ignore' или изменить эту строку:
utils.to_unicode(line).split()
к этому:
line.split()
Пример файла ontology_corpus.lst:
<http://purl.obolibrary.org/obo/GO_0090141> EquivalentTo <http://purl.obolibrary.org/obo/GO_0065007> and <http://purl.obolibrary.org/obo/RO_0002213> some <http://purl.obolibrary.org/obo/GO_0000266>
<http://purl.obolibrary.org/obo/GO_0090141> SubClassOf <http://purl.obolibrary.org/obo/GO_0065007>
Проблема в том, что он работает, но я боюсь, что результаты будут ошибочными из-за игнорируемой ошибки кодирования! Есть ли решение для этого или мой подход будет хорошо?