用python实现影评倾向性文本分类器
时间: 2023-05-24 19:06:48 浏览: 25
以下是一个简单的影评倾向性文本分类器,使用Python和scikit-learn库。该分类器可以对影评进行分类,判断它们是正面的还是负面的。
首先,需要准备几个Python依赖项:
- scipy
- numpy
- pandas
- scikit-learn
可以使用以下命令在终端中安装它们:
```
pip install numpy
pip install pandas
pip install scipy
pip install scikit-learn
```
接下来,我们需要准备训练数据。我们将使用IMDb数据集,其中包含25,000条正面的和25,000条负面的电影评论。可以在这里下载它:http://ai.stanford.edu/~amaas/data/sentiment/
下载完成后,将其解压缩到一个文件夹中。在该文件夹中,有两个文件夹,一个是正面评论,另一个是负面评论。每个文件夹中都有大约12,500个文本文件。
接下来,我们需要将这些文本文件加载到Python中。以下是一个函数,它将读取指定目录中的所有文本文件并将它们转换为一个Pandas DataFrame:
```python
import os
import pandas as pd
def load_data(directory):
data = []
for filename in os.listdir(directory):
if filename.endswith(".txt"):
with open(os.path.join(directory, filename)) as f:
review = f.read()
data.append(review)
df = pd.DataFrame(data, columns=["review"])
df["sentiment"] = directory.split("/")[-1]
return df
```
现在可以使用以下代码将所有文本文件加载到DataFrame中:
```python
pos_df = load_data("aclImdb/train/pos")
neg_df = load_data("aclImdb/train/neg")
train_df = pd.concat([pos_df, neg_df], ignore_index=True)
```
现在,我们需要对训练数据进行一些预处理。我们将使用scikit-learn的CountVectorizer来将文本转换为数字特征向量,并使用TfidfTransformer来进行TF-IDF归一化。
以下是预处理数据所需的代码:
```python
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
vectorizer = CountVectorizer(stop_words="english")
transformer = TfidfTransformer()
X_train_counts = vectorizer.fit_transform(train_df["review"])
X_train_tfidf = transformer.fit_transform(X_train_counts)
y_train = train_df["sentiment"].map({"pos": 1, "neg": 0})
```
现在我们准备训练分类器。这里我们将使用scikit-learn的逻辑回归分类器。
以下是分类器训练所需的代码:
```python
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train_tfidf, y_train)
```
现在我们已经训练好了分类器,可以用它来分类新的评论。
以下是一个函数,它将采用一个评论字符串并返回一个0或1的分类结果:
```python
def predict_sentiment(clf, review):
X_test_counts = vectorizer.transform([review])
X_test_tfidf = transformer.transform(X_test_counts)
y_pred = clf.predict(X_test_tfidf)[0]
return y_pred
```
现在可以使用以下代码测试分类器:
```python
review = "This movie was great! I loved it."
sentiment = predict_sentiment(clf, review)
print("Sentiment: ", sentiment)
review = "This movie was terrible. I hated it."
sentiment = predict_sentiment(clf, review)
print("Sentiment: ", sentiment)
```
这个分类器只是一个简单的开始。还有许多方式可以改进它,包括使用更复杂的特征提取方法和更复杂的分类器。