自然语言是人类智慧的结晶,自然语言处理是人工智能中最为困难的问题之一,而对自然语言处理的研究也是充满魅力和挑战的。
文本->语义
分类器
文本->特征值
今天 中午 我要 吃 饺子
NLTK - 自然语言工具包
使用指南
import nltk.tokenize as tk
tk.sent_tokenize(段落) -> 按句拆分
首字母大写、句尾标点(.!?...)
tk.word_tokenize(句子) -> 按单词拆分
n个连续<空格>、换行、标点
分词器 = tk.WordPunctTokenizer()
分词器.tokenize(句子)->按单词拆分
示例
import nltk.tokenize as tk
doc = "Are you curious about tokenization? " \\
"Let's see how it works! " \\
"We need to analyze a couple of sentences " \\
"with punctuations to see it in action."
print(doc)
tokens = tk.sent_tokenize(doc)
for i, token in enumerate(tokens):
print('%2d' % (i + 1), token)
print('-' * 15)
tokens = tk.word_tokenize(doc)
for i, token in enumerate(tokens):
print('%2d' % (i + 1), token)
print('-' * 15)
tokenizer = tk.WordPunctTokenizer()
tokens = tokenizer.tokenize(doc)
for i, token in enumerate(tokens):
print('%2d' % (i + 1), token)
波特:偏宽松,保留更多的字母
兰卡斯特:偏严格,只保留较少的字母
思诺博:偏中庸,严格程度居于二者这间
词干!=词根!=原型
语义识别单位
import nltk.stem.porter as pt
import nltk.stem.lancaster as lc
import nltk.stem.snowball as sb
words = ['table', 'probably', 'wolves',
'playing', 'is', 'dog', 'the',
'beaches', 'grounded', 'dreamt',
'envision']
pt_stemmer = pt.PorterStemmer()
lc_stemmer = lc.LancasterStemmer()
sb_stemmer = sb.SnowballStemmer('english')
for word in words:
pt_stem = pt_stemmer.stem(word)
lc_stem = lc_stemmer.stem(word)
sb_stem = sb_stemmer.stem(word)
print("%8s %8s %8s %8s" % (word, pt_stem,
lc_stem, sb_stem))