自然语言处理(七)Gensim与word2vec

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/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值