zoukankan      html  css  js  c++  java
  • Windows10下python3.5对维基百科语料用word2vec进行训练寻找同义词相似度

    首先把需要下载的东西都列出来

    1. 语料:下载地址是https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2,或者在这里找https://dumps.wikimedia.org/zhwiki/。这个文件只包含了标题和正文,不包含词条之间的链接信息,大小约为1.3G。

    2.WikiExtractor:用于从原始的xml文件中提取出标题和正文。地址https://github.com/attardi/wikiextractor/blob/master/WikiExtractor.py。因为这个文件不依赖其他文件和库,就直接在本地新建一个脚本,再把WikiExtractor.py中的源码复制过来就行了。

    3.繁体简体转换工具:由于词条原文本中可能混杂了繁体和简体,需要统一转换为简体。Linux下可以直接wget后在终端中使用,windows版本只能手动下载了,地址https://code.google.com/archive/p/opencc/downloads。下完直接解压就可以了。

    此时有三个文件,分别是zhwiki-latest-pages-articles.xml.bz2,WikiExtractor.py,和文件夹opencc-0.4.2(链接:https://bintray.com/package/files/byvoid/opencc/OpenCC)。

    1、首先我们要获得维基百科的中文语料库,这个文件非常大,需要慢慢下载;

    下载地址为https://dumps.wikimedia.org/zhwiki//

    2、通过https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2

    我们就得到了1.45GB的中文语料zhwiki-latest-pages-articles.xml.bz2

    3、里面内容以xml格式保存,所以我们后续还是需要做处理的(转换为text文档)

    这里抽取有两种方法:

    (1)process_wiki.py 源码进行抽取(但是我试了好几次都没有成功,导入之后解析的text文件没有反应,倒是输出了一堆文档,不知道怎么回事)

    训练方法:在文件目录下python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text

    (2)WikiExtractor.py源码训练:https://github.com/attardi/wikiextractor/edit/master/WikiExtractor.py

      命令行进入当前文件夹输入python WikiExtractor.py -b 500M -o extracted zhwiki-latest-pages-articles.xml.bz2

    训练结果如图(大概需要一个多小时吧,后面非常慢):

     一个小时后,跑完了,看:

    500M代表提取出来的单个文件最大为500M。这是会产生目录extracted/AA,其中有三个文件分别是wiki_00,wiki_01,wiki_02

    之后对文档进行转换:

    2.命令行进入AA文件夹,假设opencc.exe的绝对路径是

    E:下载语料opencc-0.4.2opencc.exe,输入

    加上绝对路径之后得到三个文件:

    我们看看这个文件的内容,明显有一些无用的符号,需要把它们去掉:

     去掉这些没用的符号就是下图这样的,去掉了哈哈哈:

    代码:

    import re
    import sys
    import codecs
    def filte(input_file):
        p1 = re.compile('()')
        p2 = re.compile('《》')
        p3 = re.compile('')
        p4 = re.compile('')
        p5 = re.compile('<doc (.*)>')
        p6 = re.compile('</doc>')
        outfile = codecs.open('std_' + input_file, 'w', 'utf-8')
        with codecs.open(input_file, 'r', 'utf-8') as myfile:
            for line in myfile:
                line = p1.sub('', line)
                line = p2.sub('', line)
                line = p3.sub('', line)
                line = p4.sub('', line)
                line = p5.sub('', line)
                line = p6.sub('', line)
                outfile.write(line)
        outfile.close()
    if __name__ == '__main__':
        input_file = 'zh_wiki_02'
        filte(input_file)
        print("ok!")

  • 相关阅读:
    【Nowcoder71E】组一组(差分约束,最短路)
    【CodeChef】Querying on a Grid(分治,最短路)
    【BZOJ4061】[Cerc2012]Farm and factory(最短路,构造)
    【AtCoder3611】Tree MST(点分治,最小生成树)
    【AtCoder2134】ZigZag MST(最小生成树)
    【CF891C】Envy(最小生成树)
    【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
    【BZOJ5337】[TJOI2018]str(动态规划,哈希)
    【BZOJ5336】[TJOI2018]party(动态规划)
    【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)
  • 原文地址:https://www.cnblogs.com/gcter/p/8695842.html
Copyright © 2011-2022 走看看