【发布时间】:2019-11-10 14:13:54
【问题描述】:
我正在尝试使用以下代码对文档进行词形还原。词形还原有效。它产生字节串。因此,代码的下一部分会产生“cant concan byte to str”错误。然后我将标记更改为 str(),如下面的代码所示。代码输出如下;(我使用的是Python 3.7(64位))
AttributeError Traceback (most recent call last)
<ipython-input-223-cb505389f802> in <module>
1 #Build a Vocabulary
----> 2 model.build_vocab(train_demo_corpus)
~\Anaconda3\lib\site-packages\gensim\models\doc2vec.py in build_vocab(self, documents, update, progress_per, keep_raw_vocab, trim_rule, **kwargs)
727 """
728 total_words, corpus_count = self.vocabulary.scan_vocab(
--> 729 documents, self.docvecs, progress_per=progress_per, trim_rule=trim_rule)
730 self.corpus_count = corpus_count
731 report_values = self.vocabulary.prepare_vocab(
~\Anaconda3\lib\site-packages\gensim\models\doc2vec.py in scan_vocab(self, documents, docvecs, progress_per, trim_rule)
807 for document_no, document in enumerate(documents):
808 if not checked_string_types:
--> 809 if isinstance(document.words, string_types):
810 logger.warning(
811 "Each 'words' should be a list of words (usually unicode strings). "
AttributeError: 'str' object has no attribute 'words'
这是我的代码;
train_demo_corpus = list(lemmat(lee_train_demo_file))
def lemmat(fname, tokens_only=False):
with smart_open.smart_open(fname, encoding="iso-8859-1") as f:
for i, line in enumerate(f):
tokens = gensim.utils.lemmatize(line)
if tokens_only:
yield str(tokens)
else:
# For training data, add tags
yield str(gensim.models.doc2vec.TaggedDocument(tokens, [i]))
model = gensim.models.doc2vec.Doc2Vec(vector_size=50, min_count=2, epochs=40)
model.build_vocab(train_demo_corpus)
最好的问候,
【问题讨论】:
-
'b' 表示一个字节串。查看stackoverflow.com/questions/6269765/… 了解更多信息。您可以在 Google 上获取有关如何使用此功能的大量信息。
-
是的,正如@bivouac0 所指出的,您看到的
b'不是字符串的一部分,而是对您(程序员)其类型的指示符。如果您正在打印一个原始 Python 对象(如TaggedDocument),那么它的出现是合适的。另一方面,如果您尝试直接打印像第一个文档的第一个单词这样的字符串——print (train_demo_corpus[0].words[0])——它不应该出现。因此,如果还有其他问题,请添加更多详细信息,说明问题的原因。 -
嗨@gojomo,让我指定问题:在下一步中,当以下代码运行时,我得到“TypeError: can't concat str to bytes”:model = gensim.models.doc2vec.Doc2Vec (vector_size=50, min_count=2, epochs=40) model.build_vocab(train_demo_corpus) ...我的问题是为什么我的问题中给出的代码会产生二进制输出?如何将它们解码为 str?
-
我需要查看整个错误堆栈(包含代码行和行号)以了解您收到的下一个错误。您可以编辑您的问题以添加它,因此您拥有比这些 cmets 更多的空间和格式选项。 (此外,由于 Python 2.x 和 Python 3.x 之间的编码/字符串类型问题有所不同,请说明您使用的是哪个。)
-
我刚刚根据您的反馈编辑了我的问题...
标签: gensim lemmatization