text = text.lower() //全部小写
import re
text = re.sub(r”[a-zA-Z0-9]”,” ”,text) //标点移除
//标记化(Tokenization )
Words = text.split() //以空格分词 ‘,’也会被分为一个词
//NLTK 自然语言工具包
From nltk.tokenize import word_tokenize
Words = word_tokenize(text)
//这种方法 Dr.会被分为一个词
From nltk.tokenize import sent_tokenize
Sents = sent_tokenize(text)
//停用词
From nltk.corpus import stopwords
Words = [w for w in words if w not in stopwords.words(“english”)]
//词性标注
From nltk import pos_tag
words = word_tokenize(text)
pos = Pos_tag(words)
//命名实体识别
From nltk import pos_tag,ne_chunk
From nltk.tokenize import word_tokenize
words = word_tokenize(text)
pos = Pos_tag(words)
Ne_chunk(pos)
//词干提取(stemming)
//将词还原成词干或词根,对内存要求较低
eg: branching/branched/branches->branch
//但是有时会生成不是完整单词的词干,比如changing->chang
From nltk.stem.porter import PorterStemmer
Stemmed = [PorterStemmer().stem(w) for w in words] (words已去除停用词)
//词形还原器(Lemmatization)
//与上面那个区别在于基于词典(好像是),生成有含义的词,比如changing->change
eg:is/are/am -> be
From nltk.stem.porter import WordNetLemmatizer
Lemmed = [wordNetLemmatizer().lemmatize(w) for w in words]
//默认转换n,可指定词性
Lemmed = [wordNetLemmatizer().lemmatize(w,pos = “v”) for w in words]
//常用方法是先lemmatization,后stemming
深度学习自然语言运算:
词袋模型:
可用于比较两个文档中有多少共词或词频相似度
计算两个向量之间的点积
缺陷:只捕捉重叠部分
改进:计算余弦相似度(-1,1)
1表示相似度最高,-1表示相似度最低
词袋模型的另一个限制是将每个词的重要性同等对待
TF-IDF:
独热编码
单词嵌入:
Word2Vec 词->向量 正向嵌入
给出相邻词、给出中间词
GloVe 全局向量
t-SNE t分布随机邻域嵌入,是一种降维技术,
有点像PCA(主成分分析),
但在转换时,尝试保持对象之间的的相对距离
可用于词嵌入可视化
主题建模 Topic Modeling
LDA 潜在狄克雷分布