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)