Chapter 8 自然语言处理
自然语言处理(Natural Language Processing, NLP)是计算机科学领域的一个重要分支,涉及了处理和分析人类语言的文本数据。
8.1 分词 (Tokenization):
分词是将文本拆分成单词或标记的过程。在Python中,你可以使用NLTK(Natural Language Toolkit)或spaCy库进行分词。
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
text = "自然语言处理是一门重要的领域。"
tokens = word_tokenize(text)
print(tokens)
8.2 词袋表示 (Bag of Words, BoW):
词袋表示将文本转化为向量,其中每个单词都是一个特征。这是一种常见的文本表示方法。
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
"自然语言处理是一门重要的领域。",
"NLP技术可以用于文本分类、情感分析等任务。"
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())
8.3 TF-IDF (Term Frequency-Inverse Document Frequency):
TF-IDF是一种文本特征表示方法,它考虑了词频和逆文档频率,用于衡量单词在文档集中的重要性。
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
"自然语言处理是一门重要的领域。",
"NLP技术可以用于文本分类、情感分析等任务。"
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())
8.4 词嵌入 (Word Embeddings):
词嵌入是将单词映射到连续向量空间的方法,其中单词的含义由其向量表示。
from gensim.models import Word2Vec
sentences = [
"自然语言处理是一门重要的领域。",
"NLP技术可以用于文本分类、情感分析等任务。"
]
tokens = [sentence.split() for sentence in sentences]
model = Word2Vec(tokens, vector_size=100, window=5, min_count=1, sg=0)
vector = model.wv['自然语言']
print(vector)
8.5 文本分类 (Text Classification):
文本分类是将文本分为不同类别的任务,包括情感分析、垃圾邮件过滤、新闻分类等。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 获取新闻数据集
newsgroups = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(newsgroups.data, newsgroups.target, test_size=0.2, random_state=42)
# 特征提取
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)
# 训练分类器
classifier = SVC(kernel='linear')
classifier.fit(X_train, y_train)
# 预测并计算准确率
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)