我是文本分类的新手,在这里找到了这个简单的教程,这似乎是进一步开发的良好开端:
https://asinayev.github.io/choosing-multiple-labels-for-text-part-2-word2vec.html
我在该网页上找到的代码中添加了以下导入:
import regex as re
import stopwords
import string
import scipy
import gensim.models.keyedvectors as word2vec
我把原来的代码改为:
^{pr2}$收件人:
import gensim.models.keyedvectors as word2vec
并根据gensim的最新变化加载模型:
model = word2vec.KeyedVectors.load_word2vec_format('asd.bin.gz')
为了测试模型负载是否正确,我使用(而且确实如此):
print(model.most_similar('teacher'))
以下是复制和粘贴部分,以错误结尾:
def clean(sentence, model):
regex = re.compile('[%s]' % re.escape(string.punctuation))
tokens = str.split(sentence)
cleans = []
for t in tokens:
if t in model:
cleans.append(t)
elif t.lower() in model:
cleans.append(t.lower())
elif regex.sub('_', t) in model:
cleans.append(regex.sub('_', t))
elif len(str.split(regex.sub(' ', t))) > 1:
for token in str.split(regex.sub(' ', t)):
if clean(token): cleans.append(clean(token)[0])
cleans = [w for w in cleans if w not in stopwords.words("english")]
return cleans
def model_similarity (model, list1, list2, l1neg=[], l2neg=[]):
list1sum = sum([model[l] for l in list1])
list2sum = sum([model[l] for l in list2])
if l1neg: list1sum -= sum([model[l] for l in l1neg])
if l2neg: list1sum -= sum([model[l] for l in l2neg])
return 1-scipy.spatial.distance.cosine(list1sum,list2sum)
为了测试这些函数是否有效,我使用以下方法进行测试:
model_similarity(clean('king woman'),clean('queen'), l1neg=['man'])
TypeError: clean() missing 1 required positional argument: 'model'
老实说,我不确定一个位置论是否,因此很难解决它。在
谢谢你的努力!在
其他信息:我正在Windows10上使用Python3.6.5
编辑:解决了这个问题:
函数的正确调用是:
model_similarity(model, clean('king woman', model), clean('queen', model))
0.6532526016235352
请注意您编写的model_similarity()的定义:
python期望前三个参数是model、list1和list2。这些被称为位置参数,因为在定义中列出它们时,没有后面跟等号的名称(就像对l1neg和l2neg一样)。看来你忘了包括模型了。请参见位置与关键字参数:https://docs.python.org/2/glossary.html
您似乎还忘记在clean()的调用中包含该模型。在
所以电话看起来像:
^{pr2}$另外,请确保在所有函数定义之后缩进代码。看来可能还有其他问题。在
相关问题 更多 >
编程相关推荐