文本特征计算。
在文档集“我是中国人,我爱中国”,“我是上海人”,“我住在上海松江大学城”再添加两条文本“松江大学城有很多大学”,“大学城共有15万余大学生”。
1)计算文档集中每条文本的词袋和TF-IDF特征表示。
2)比较获得的词向量与课堂实例中只使用前三条文本计算出的词向量是否一致,说明原因。
from patsy.contrasts import test_diff
from sklearn.feature_extraction.text import CountVectorizer
import jieba
corpus0=[
"我是中国人,我爱中国",
"我是上海人",
"我住在上海松江大学城"
]
split_corpus0=[]
for text in corpus0:
words=" ".join(jieba.cut(text))
split_corpus0.append(words)
print(split_corpus0)
#生成词袋
cv=CountVectorizer()
cv_fit=cv.fit_transform(split_corpus0)
print(cv.get_feature_names_out())
print(cv_fit.toarray())
#TF-IDF模型
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer=TfidfTransformer()
tfidf_fit=tfidf_transformer.fit_transform(cv_fit)
print(tfidf_fit.toarray())
corpus=[
"我是中国人,我爱中国",
"我是上海人",
"我住在上海松江大学城",
"松江大学城有很多大学",
"大学城共友15余万名大学生"
]
split_corpus=[]
for text in corpus:
words=" ".join(jieba.cut(text))
split_corpus.append(words)
print(split_corpus)
#生成词袋
cv=CountVectorizer()
cv_fit=cv.fit_transform(split_corpus)
print(cv.get_feature_names_out())
print(cv_fit.toarray())
#TF-IDF模型
tfidf_transformer=TfidfTransformer()
tfidf_fit=tfidf_transformer.fit_transform(cv_fit)
print(tfidf_fit.toarray())
从天猫/京东收集自己感兴趣的某种商品的评价文本,自己为每条文本添加情感标注:正向、中性、负向。数据保存格式参见垃圾邮件分类实例。训练分类模型实现文本情感的识别。
import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import classification_report, confusion_matrix
# 读取数据
with open("D:\\aaa东华大学\\专业课\\数据科学\\homework\\product_comment.txt", 'r', encoding='utf-8') as file:
lines = file.readlines()
# 分割数据为特征和标签
comments = []
labels = []
for line in lines:
# 检查是否包含制表符 '\t'
if '\t' in line:
content, label = line.strip().split('\t')
comments.append(content)
labels.append(label)
# 使用jieba进行中文分词
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(" ".join(jieba.lcut(comment)) for comment in comments).toarray()
# 将标签转换为数值
label_map = {'正向': 1, '中性': 0, '负向': -1}
y = [label_map[label] for label in labels]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)
# 创建SVM分类器
clf = svm.SVC(kernel='rbf', gamma=0.7, C=1.0)
# 训练模型
clf.fit(X_train, y_train)
# 进行预测
y_pred = clf.predict(X_test)
# 打印性能指标
print("SVM accuracy:", clf.score(X_test, y_test))
print("SVM classification report:\n", classification_report(y_test, y_pred))
print("SVM confusion matrix:\n", confusion_matrix(y_test, y_pred))