自然语言是人类智慧的结晶,自然语言处理是人工智能中最为困难的问题之一,而对自然语言处理的研究也是充满魅力和挑战的。

NLP

文本->语义

分类器

文本->特征值

今天 中午 我要 吃 饺子

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))

词型还原