根据这一阵子对文本分析的研究,做了一些整理,可供参考。
有不对之处,恳请大家指正。

预料库

1)直接下载现成的语料库
2)爬虫方法获取语料库
3)当前分析的所有文本形成语料库

文本预处理

主要包括:
1)文本删除(文本去重复、机械压缩去词、短句删除、去除无效标签等)
2)编码转换
3)拼写检查(针对英文)
4)大小写统一(针对英文)
5)分词
6)去停用词(网上提供1208个停用词:https://pan.baidu.com/s/1gfMXMl9)

分词方法

主要包括:
1)jieba分词
2)哈工大ltp、中科院ICTLAS、东北大学NIU parser
3)nltk分词

# jieba分词示例
import jieba
word = '我是一个小学生,新来的呢'
word_cut = []
word_cut.append(' '.join(jieba.cut_for_search(word)))

#output
['我 是 一个 小学 学生 小学生 , 新来 的 呢']

文本向量化

在分词和预处理之后,需要对文本进行向量化。

one-hot词向量:

1)词袋向量化:每个单词是否出现,0/1值

from sklearn.feature_extraction.text import CountVectorizer 

2)词频向量化:计算每个单词在总体中出现的频率,[0,1]值

# TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

# or

# TfidfModel
from gensim.models import TfidfModel

# or

# HashingVectorizer
from sklearn.feature_extraction.text import HashingVectorizer

分布式词向量:

word2vec

from gensim.models import Word2Vec

文本分析的应用

1. 情感分析

情感分析词库:

1)WordNet和SentiWordNet
2)知网整理的HowNet词典、台湾大学发布的NTUSD中文词典以及大连理工大学的中文情感词汇本体。

中文情感分析:

可以自定义正、负情感的预料库,替换安装路径下的文件:./snownlp/sentiment/pos.txt和neg.txt

# pip install snownlp
# 返回积极情绪的概率
from snownlp import SnowNLP

def chinese_emotion(string):
    obj = SnowNLP(string)
    s = obj.sentences
    if len(s) > 1:
        ss = ''
        for i in s:
            ss += str(i)
    else:
        ss = str(s)
    freq = SnowNLP(ss).sentiments
    return string, freq

英文情感分析:

# pip install textblob
# python -m textblob.download_corpora # 返回积极情绪概率polarity和主管情绪概率subjectivity

from textblob import TextBlob

def english_emotion(string):
    obj = TextBlob(string)
    freq = obj.sentiment.polarity
    return string, freq

2. 敏感词检测

1)基于内容相似性、固定信息过滤等方法(DFA方法)
2)朴素贝叶斯等有监督模型

# DFA
# 需要调用:https://github.com/ericzh/smallgfw/smallgfw.py
gfw.check(row)
gfw.set(["sexy","girl","love","shit"]) #设置敏感词库
gfw.replace("Shit!,Cherry is a sexy girl. She loves python.","*") #替换敏感词
gfw.check("Shit!,Cherry is a sexy girl. She loves python.") #检测敏感词的出现位置

3. 主题模型挖掘

LDA 主题模型算法:

建立主题分析模型,识别输入文本的主题(自定义主题个数)

from gensim import corpora, models
models.LdaModel()
# or
import lda

pLDA模型:

从全部文章的所有词语中找出N个作为主题,再计算出每篇文章属于这N个主题的权重

LSI模型:

通过奇异值分解的方法计算出文本中各个主题的概率分布

import gensim

关键词抽提:

1)基于TF-IDF算法

from jieba.analyse import extract_tags

2)基于TextRank算法

from jieba.analyse import textrank

4. 基于上下文的文本分类

word2vec模型:

1)输入层:分词后的文本
2)投影层:
模型参数说明:https://blog.csdn.net/szlcw1/article/details/52751314
输入文本多个词向量求平均:https://blog.csdn.net/liugallup/article/details/51164962
3)输出层:分布式词向量、词语间相似性判断

# word2vec模型构建
from jieba.analyse import textrank
sentences = word2vec.Text8Corpus(path + 'corpus_afterSeg.txt') #加载预料库
model = word2vec.Word2Vec(sentences, min_count=min_count, size=size, window=window, workers=workers)
model.save(path + 'corpus.model')
model.wv.save_word2vec_format(path + 'corpus.model.bin', binary = True)

# 模型预测
vec = model[word]
print(vec)

Doc2Vec 模型:

输入为段落向量

FastText模型:

与word2vec类似,速度更快,目前仅支持Linux和Mac系统下操作
fasttext格式:‘_ label _ _ X Text blabla... ’
遗留问题:为什么模型的precision一直等于recall ?

import fasttext
classifier = fasttext.supervised('fasttext_train.txt','fasttext.model',label_prefix='__label__',lr=0.05, dim=200, min_count=3,loss='softmax',encoding='utf-8')
# classifier = fasttext.load_model('fasttext.model.bin', label_prefix='__label__')
result = classifier.test("fasttext_test.txt")
print(result.precision) #0.765
print(result.recall)
print(result.nexamples)

5. 文本相似度计算

from gensim import corpora, models, similarities

6. 搜索优化模型

暂未了解。

鸣谢!

fastText | 我爱自然语言处理 http://www.52nlp.cn/tag/fasttext
Facebook的NLP库的使用:利用FastText进行文本分类和词提示 | ATYUN http://www.atyun.com/3590.html
使用fasttext实现文本处理及文本预测 - CSDN博客 https://blog.csdn.net/meyh0x5vDTk48P2/article/details/79055553
GitHub - facebookresearch/fastText https://github.com/facebookresearch/fastText
win7 python3.6安装fasttext | 易学教程 https://www.e-learn.cn/content/python/632699
词语向量化-word2vec简介和使用 - CSDN博客 https://blog.csdn.net/xsdxs/article/details/72951545
gensim函数库的Word2Vec的参数说明 - CSDN博客 https://blog.csdn.net/szlcw1/article/details/52751314
词向量:对word2vec的理解 - CSDN博客 https://blog.csdn.net/sinat_33741547/article/details/78759289
情感分析资源 (转) - Charleston - 博客园 http://www.cnblogs.com/finesite/p/3381803.html
NLP之淘宝商品评论情感分析 https://zhuanlan.zhihu.com/p/29747435
Dataset | Yongfeng Zhang http://yongfeng.me/dataset/
GitHub - Codelegant92/SentimentAnalysis-chinese https://github.com/Codelegant92/SentimentAnalysis-chinese
GitHub - isnowfy/snownlp: Python library for processing Chinese text https://github.com/isnowfy/snownlp
GitHub - build2last/EC-Master: 电商爬虫与观点挖掘 https://github.com/build2last/EC-Master