Gensim是一个用于从文档中自动提取语义主题的Python库,足够智能,堪比无痛人流。
它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法, 支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口.
如果去除文本中的标点符号,然后停用词过滤,效果会更好。
import re
r = re.compile("[\s+\.\!\/_,$%^*(+\"\']+|[+——!;「」》::“”·‘’《,。?、~@#¥%……&*()()]+")
sentence = r.sub('',line)
去除符号
这里封装了一个类,可以有效的训练
class MySentences(object):
def __init__(self, filename):
self.filename = filename
def __iter__(self):
lac=LAC(mode='seg')
for line in open(self.filename, "r", encoding='utf_8'):
yield lac.run(line)
sentences = MySentences('xinhua_j.txt') # a memory-friendly iterator
# model = gensim.models.Word2Vec(sentences)
for line in sentences:
print(line)
sentences = MySentences(r'E:\XMU\大三下学期\语言分析技术\作业\word2vec\word2vec\examples\data') # a memory-friendly iterator
model = gensim.models.Word2Vec(sentences)
如果一个类想被用于for ... in
循环,类似list或tuple那样,就必须实现一个__iter__()
方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()
方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
yield看做“return”,但返回的是生成器,然后我们用next()函数调用,然后一遍遍的运行了。
详细yield在这里
https://blog.csdn.net/mieleizhi0522/article/details/82142856/