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!")

原文地址:https://www.cnblogs.com/gcter/p/8695842.html