自然语言处理——word2vec项目实战—— NLP理论基础

本文介绍了自然语言处理(NLP)的基本概念,包括使用NLTK和jieba进行分词,正则表达式进行预处理,以及情感分析和文本相似度计算。内容涵盖词干提取、词形归一、词性标注和停用词处理,同时展示了如何利用TF-IDF进行文本分类。此外,还展示了在实际问题中,如家居产品搜索相关性竞赛,如何进行文本预处理和特征工程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NLP理论基础

语料库

NLTK : pip install nltk

http://www.nltk.org//

(40条消息) NLTK安装方法_一脑子RMC136的博客-优快云博客_nltk安装教程

文本处理流程

句子→预处理→分词(Tokenize)→特征工程(make features)→机器学习(machine learning)

分词(Tokenize)

把长句子拆成“有意义”的小部件

英文

from nltk.tokenize import word_tokenize
sentences = 'hello world'
token = word_tokenize(sentences)
print(token)
['hello', 'world']

中文

import jieba
seg_list = jieba.cut('我到北京清华大学',cut_all=True)
print('full mode:','/'.join(seg_list)) # 全模式
seg_list = jieba.cut('我到北京清华大学',cut_all=False)
print('default mode:','/'.join(seg_list)) # 精确模式
seg_list = jieba.cut('我到北京清华大学')
print('/'.join(seg_list)) # 默认精确模式
seg_list = jieba.cut_for_search('我到北京清华大学')
print('/'.join(seg_list)) # 搜素引擎模式
full mode: 我/到/北京/清华/清华大学/华大/大学
default mode: 我/到/北京/清华大学
我/到/北京/清华大学
我/到/北京/清华/华大/大学/清华大学

预处理

社交语言

举例:

from nltk.tokenize import word_tokenize
tweet = 'RT @angelababy : love you baby! :D http://ah.love #168cm'
print(word_tokenize(tweet))
['RT', '@', 'angelababy', ':', 'love', 'you', 'baby', '!', ':', 'D', 'http', ':', '//ah.love', '#', '168cm']

如何做呢?

import re :正则表达式 → 常用于字符串处理

对照表:http://www.regexlab.com/zh/regref.htm

#### re.compile 是变为方法 去判定,符合条件的筛选出来
import re
emotions_str = r"""
    (?:
        [:=;] # 眼睛
        [oO\-]? # 鼻子
        [D\)\]\<\]/\\OpP] # 嘴
    )"""
# []表示里面任何一个都可以,[]?表示可存在可不存在
regex_str = [
    emotions_str,
    r'<[^>]+>', # HTML tags
    r'(?:@[\w_]+)', # @某人
    r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)", # 话题标签
    r'http[s]?://(?:[a-z][0-9]|[$-_@.&amp:+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+', # URLs
    r'(?:(?:\d+,?)+(?:\.?\d+)?)', # 数字
    r"(?:[a-z][a-z'\-_]+[a-z])", # 含有-和‘的单词
    r'(?:[\w_]+)', # 其他
    r'(?:\s)', # 其他
]
emotion_re = re.compile(r'^'+emotions_str+'$',re.VERBOSE | re.IGNORECASE)
tokens_re = re.compile(r'('+'|'.join(regex_str)+')',re.VERBOSE | re.IGNORECASE)
def tokenize(s):
    return tokens_re.findall(s)
def preprocess(s, lowercase=False):
    tokens = tokenize(s)
    if lowercase:
        tokens = [token if emotion_re.search(token) else token.lower() for token in tokens]
    return tokens
tweet = 'RT @angelababy: love you baby! :D http://ah.love #168cm'
print(preprocess(tweet))
['RT', ' ', '@angelababy', ' ', 'love', ' ', 'you', ' ', 'baby', ' ', ':D', ' ', 'http://ah.love', ' ', '#168cm']
纷繁复杂的词性
  • Inflection(不影响词性):walk→walking→walked
  • derivation(影响词性):nation(noun)→national(objective)→nationalize(verb)
Stemming词干提取

一般来说,就是把不影响词性的inflection的小尾巴砍掉——词根

walking→walk、walked→walk

PorterStemmer
from nltk.stem.porter import PorterStemmer
P = PorterStemmer() # 类调用之前要初始化
print(P.stem('maximum'))
print(P.stem('walking'))
maximum
walk
SnowballStemmer
from nltk.stem import SnowballStemmer
S = SnowballStemmer('english')
print(S.stem('maximum'))
print(S.stem('walking'))
maxim
walk
LancasterStemmer
from nltk.stem.lancaster import LancasterStemmer
L = LancasterStemmer()
print(L.stem('maximum'))
print(L.stem('walking'))
maxim
walk
Lemmatization词形归一

把各种类型的词的变形,都归为一个形式——语料库

went→go、are→be

需要经常更新

from nltk.stem import WordNetLemmatizer
W = WordNetLemmatizer()
print(W.lemmatize('went',pos='v'))
print(W.lemmatize('are',pos='v'))
go
be
词性标注
import nltk
text = nltk.word_tokenize('what does the fox say')
print(text)
tag = nltk.pos_tag(text)
print(tag)
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非零因子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值