七、首先点击打开下方链接,然后点击红色箭头指向的红色框内容(Setup)。
grep下载官方链接:点击打开官方链接
八、正常安装解压后进行环境配置,将你bin文件夹的具体位置(博主举例是G:\GnuWin32\bin)复制,然后粘贴加到环境变量中path里面去。
九、因为content字段去除了HTML标签,保存的是新闻正文文本,也就是< content >页面内容< /content >。所以取出content字段中的内容,复制下面代码在cmd平台运行执行命令取出页面内容。(type命令表示打开文件; iconv -f gbk -t utf-8 -c命令中-f --from-code等于名称 原始文本编码,-t --to-code等于名称 输出编码,-c 从输出中忽略无效的字符,整体表示将原文件编码由gbk转换成utf-8且忽略无效的字符;grep "< content >"表示grep命令用于查找取出文件里符合< content >条件的字符串;>命令表示生成相应文件)。
type news_sohusite_xml.smarty.dat | iconv -f gbk -t utf-8 -c | grep "<content>" > corpus.txt
十、得到文件名为corpus.txt的文件后,可以通过复制下面代码在cmd平台打开文件内容。注意:corpus.txt文件编码在上一步命令操作的时候已经由gbk编码转换成utf-8,而cmd平台默认编码为gbk,所以下面在cmd打开文件会出现乱码。
type corpus.txt
十一、为正常显示corpus.txt文件内容,需要复制下面代码在cmd平台命令行输入(65001代表编码格式为utf-8)。
chcp 65001
十二、再次通过复制下面代码在cmd平台打开文件内容。注意:cmd平台编码在上一步命令操作的时候已经由gbk编码转换成utf-8,所以下面在cmd打开文件不会出现乱码。
type corpus.txt
十三、全自动安装jieba分词器安装,复制下面代码在cmd平台中安装好pip文件中运行。
- 注意:在安装jieba分词器首先要安装好pip,若没有安装点击打开博主的在windows系统安装pip详细过程博文:点击打开文章链接
- 注意:若没有安装python可以点击打开博主Python3.6.3安装详细简单完整版博文:点击打开文章链接
python -m pip install jieba
十四、 jieba分词简要说明
jieba分词三种分词模式:
1、精确模式,:将句子精确切开,适合文本分析,比如清华大学就切分为”清华大学“。
2、全模式:把句子中所有的成词词语都扫描出来,速度快,但是不能解决歧义,比如清华大学可以全分为“清华/大学/清华大学”这三种可能性。
3、搜索引擎模式:在精确模式的基础上,对长词再进行词切分,能短则短,可分必分,提高召回率,适合搜索引擎分词,比如清华大学可以再切分为“清华/大学/清华大学”这三种可能性。
jieba分词四种主要功能:
1、 jieba.cut:该方法接受三个参数,分别是:需要分词的字符串;cut_all 参数用来控制是否采用全模式(True表示全模式,False表示精确模式,该参数默认为是False也就是精确模式);HMM参数用来控制是否适用HMM模型。
2、 jieba.cut_for_search:该方法接受两个参数,分别是:需要分词的字符串;是否使用HMM模型。这个方法适用搜索引擎构建倒排索引的分词,粒度比较细。
3、jieba.cut 和 jieba.cut_for_search返回的结构都是可以得到的generator(生成器), 可以使用for循环来获取之前分词后的每一个词语,或者使用jieb.lcut 和 jieba.lcut_for_search 直接返回list。
4、jieba.Tokenizer(dictionary=DEFUALT_DICT) 可以新建自定义分词器,可用于同时使用不同字典,jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射;jieba.posseg.dt表示默认词性标注分词器,也就是分开句子以词语+词性,如:我 r。
注意:待分词的字符串编码可以是unicode或者UTF-8字符串或者GBK字符串,但是不建议直接输入GBK字符串,可能无法预料会误解码成UTF-8造成乱码。
jieba分词器添加自定义词典:
jieba分词器还有一个优点是开发者可以使用自定义词典,以便包含原词库中没有的词,虽然jieba分词可以进行新词识别,但是用自定义词典添加新词可以保证更高的正确率。使用一行代码命令:jieba.load_userdict(filename) # filename为自定义词典的文件路径。在使用的时候,词典的格式和jieba分词器本身的分词器中的词典格式必须保持一致,一个词占一行,每一行分成三部分,一部分为词语,一部分为词频,最后为词性(可以省略),用空格隔开,如:东北大学 5。
十五、jieba分词操作
利用jieba进行关键词抽取
jieba分词中含有analyse模块,在进行关键词提取时可以使用以下代码(sentence表示提取的文本字符串;topk表示返回N个TF-IDF权重下最大的关键字,默认数值是20;withWeight表示是否选择返回关键值对应的权重值,默认为False不返回;,allowPos表示筛选包含指定性的词,默认值为空也就是不筛选;idf_path表示IDF频率文件):
import jieba.analyse jieba.analyse.extract_tags(sentence,topk=N,withWeight=False,allowPos=()) jieba.analyse.TFIDF(idf_path=None)
或者使用基于TextRank算法的关键词抽取,代码如下;
import jieba.analyse jieba.analyse.textrank(sentence,topk=N,withWeight=False,allowPos=()) jieba.analyse.TextRank()
注意:可以使用for循环显示打印。
jieba分词进行并行运行分词
jieba分词器如果是对于大的文本进行分词会慢,因此可以使用jieba自带的并行分词功能进行分词,其采用的原理是将目标文本按照每行分开后,把各行文本分配到多个Python进程并行分词,然后归并结果,从而获得分词速度的提升。该过程需要基于python自带的multiprocessing模块。注意:目前暂时不支持windows.。
十六、全自动安装 NumPy,首先复制下面代码在cmd平台中安装好pip文件中运行,最后成功验证NumPy安装成功(from numpy import * ,表示导入 numpy 库;eye(4) ,表示生成对角矩阵)。
python -m pip install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
十七、全自动安装gensim,首先复制下面代码在cmd平台中安装好pip文件中运行。
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gensim
十八、复制下面源代码程序运行进行分词和训练操作。
""" 由原始文本进行分词后保存到新的文件 """ import jieba import numpy as np filePath='G:/python/wordvec/corpus.txt' # 存储的文件位置 fileSegWordDonePath ='corpusSegDone.txt' print('fenciqian') # 打印中文列表 def PrintListChinese(list): for i in range(len(list)): print (list[i]) # 读取文件内容到列表 fileTrainRead = [] with open(filePath,'r',encoding='UTF-8') as fileTrainRaw: for line in fileTrainRaw: # 按规定行读取文件 fileTrainRead.append(line) # jieba分词后保存在列表中 fileTrainSeg=[] for i in range(len(fileTrainRead)): fileTrainSeg.append([' '.join(list(jieba.cut(fileTrainRead[i][9:-11],cut_all=False)))]) # 精确模式分词 if i % 100 == 0: print(i) # 保存分词结果到文件中 with open(fileSegWordDonePath,'w',encoding='utf-8') as fW: # 把分词列表写入fileSegWordDonePath路径中的corpusSegDone.txt文件 for i in range(len(fileTrainSeg)): fW.write(fileTrainSeg[i][0]) fW.write('\n') print('fencihou') """ gensim word2vec获取词向量 """ import warnings import logging import os.path import sys import multiprocessing import gensim from gensim.models import Word2Vec from gensim.models.word2vec import LineSentence # 忽略警告 warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim') # 警告扰人,手动封存 if __name__ == '__main__': program = os.path.basename(sys.argv[0]) # 读取当前文件的文件名,返回path最后的文件名,若path以/或\结尾,那么就会返回空值。 # sys.argv[0]:一个从程序外部获取参数的桥梁,外部参数与程序本身没有任何数据联系,sys.arg是一个列表,第一个也就是sys.argv[0]表示程序本身,随后才依次是外部给予的参数。 logger = logging.getLogger(program) # 获取日志对象,logging模块中最基础的对象 logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s',level=logging.INFO) # format格式:%(asctime)s: 打印日志的时间; %(levelname)s: 打印日志级别名称;%(message)s: 打印日志信息 # level: 设置日志级别,默认为logging.WARNING,程序未按预期运行时使用,但并不是错误;logging.INFO表示程序正常运行时使用 logger.info("running %s" % ' '.join(sys.argv)) # inp为输入语料, outp1为输出模型, outp2为vector格式的模型 inp = 'corpusSegDone.txt' out_model = 'corpusSegDone.model' out_vector = 'corpusSegDone.vector' print('chushi') # 训练skip-gram模型 model = Word2Vec(LineSentence(inp), size=50, window=5, min_count=5, workers=multiprocessing.cpu_count()) # 将原始的训练语料转化成一个sentence的迭代器,每一次迭代返回的sentence是一个word(utf8格式)的列表。 # sentences:可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或lineSentence构建。 # size:是指特征向量的维度,默认为100。 # window:窗口大小,表示当前词与预测词在一个句子中的最大距离是多少。 # min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉也就是不会生成词向量, 默认值为5。 # workers:用于控制训练的并行数,multiprocessing.cpu_count()获取计算机CPU数量 # 保存模型 print('xunci') model.save(out_model) # 保存词向量 model.wv.save_word2vec_format(out_vector, binary=False)
十九、复制下面源代码程序运行进行文本词向量计算分析。(博主只是举例说明,大家可以进行修改扩展功能操作分析!)
from gensim.models import KeyedVectors from gensim.test.utils import datapath model= KeyedVectors.load_word2vec_format(datapath('G:/python/wordvec/corpusSegDone.vector'), binary=False) for key in model.similar_by_word('康师傅',topn=10): #注意分词时有的词语被筛选没有形成词向量,就会导致无法找到自然就无法计算分析 print(key)