ML中文文本分类

import os
import random
import jieba
import pandas as pd
import numpy as np
from sklearn.naive_bayes import MultinomialNB
stopwords=pd.read_csv("E:/datas/stopwords.txt",encoding='utf-8',quoting=3,index_col=False,sep="\t",names=['stopword'])
stopwords.head()
stopwords=stopwords['stopword'].values
folder_path='E:/datas/THUCNews/THUCNews'
folder_list = os.listdir(folder_path)  # 查看folder_path下的文件
sentences= [] 
# 遍历每个子文件夹
for folder in folder_list:
    new_folder_path = os.path.join(folder_path, folder)  # 根据子文件夹,生成新的路径
    files = os.listdir(new_folder_path)  # 存放子文件夹下的txt文件的列表

    j = 1
    # 遍历每个txt文件
    for file in files:
        if j >10000:  # 每类txt样本数最多10000个
            break
        with open(os.path.join(new_folder_path, file), 'r', encoding='utf-8') as f:  # 打开txt文件
            raw = f.read()

        word_list = jieba.lcut(raw, cut_all=False) 
        word_list = filter(lambda x:len(x)>1,word_list)
        word_list = filter(lambda x: x not in stopwords,word_list)
        sentences.append((" ".join(word_list),folder))
        j += 1
random.shuffle(sentences)
from sklearn.model_selection import train_test_split
x, y = zip(*sentences)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
print(len(x_train))
len(x_test)
import re
 
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report, confusion_matrix
 
 
class TextClassifier():
 
    def __init__(self, classifier=MultinomialNB()):
        self.classifier = classifier
        self.vectorizer = CountVectorizer(analyzer='word', ngram_range=(1,4), max_features=20000)
 
    def features(self, X):
        return self.vectorizer.transform(X)
 
    def fit(self, X, y):
        self.vectorizer.fit(X)
        self.classifier.fit(self.features(X), y)
 
    def predict(self, X):
        return self.classifier.predict(self.features(X))
 
    def score(self, X, y):
        return self.classifier.score(self.features(X), y)
    
text_classifier = TextClassifier()
text_classifier.fit(x_train, y_train)
print(text_classifier.score(x_test, y_test))

y_pred = text_classifier.predict(x_test)
print(classification_report(y_test, y_pred))  # 查看各类指标
print(confusion_matrix(y_test, y_pred)) # 查看混淆矩阵

CountVectorizer、MultinomialNB()

在这里插入图片描述

TfidfVectorizer、MultinomialNB()

在这里插入图片描述

CountVectorizer、classifier=SVC

import re
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
 
class TextClassifier():
 
    def __init__(self, classifier=SVC(kernel='linear')):
        self.classifier = classifier
        self.vectorizer = CountVectorizer(analyzer='word', ngram_range=(1,4), max_features=20000)
 
    def features(self, X):
        return self.vectorizer.transform(X)
 
    def fit(self, X, y):
        self.vectorizer.fit(X)
        self.classifier.fit(self.features(X), y)
 
    def predict(self, X):
        return self.classifier.predict(self.features(X))
 
    def score(self, X, y):
        return self.classifier.score(self.features(X), y)
    
text_classifier = TextClassifier()
text_classifier.fit(x_train, y_train)
print(text_classifier.score(x_test, y_test))

y_pred = text_classifier.predict(x_test)
print(classification_report(y_test, y_pred))  # 查看各类指标
print(confusion_matrix(y_test, y_pred)) # 查看混淆矩阵

在这里插入图片描述

TfidfVectorizer、classifier=SVC

在这里插入图片描述

要使用Java实现文本分类,可以借助一些开源的库和算法。其中,中文分词是文本分类的一个重要步骤。可以使用开源的中文分词器,比如MMAnalyzer,它可以对给定的文本进行中文分词。\[1\] 在文本分类中,特征工程也是一个关键的步骤。可以使用TF-IDF方法对文本进行表示,这可以通过使用Spark MLlib提供的功能来实现。TF-IDF可以帮助我们计算文本中每个词的重要性,从而为文本分类提供更好的特征表示。\[2\] 在实现文本分类的过程中,可以使用朴素贝叶斯算法。朴素贝叶斯是一种常用的文本分类算法,它基于贝叶斯定理和特征条件独立假设,可以用于训练模型和进行分类预测。可以使用Spark MLlib提供的朴素贝叶斯算法来完成对中文文本的分类过程。\[2\] 如果你想使用Java实现文本分类,可以先创建一个Spring Boot项目,并引入相关的依赖。如果对于Spring Boot的创建不熟悉,可以参考一些教程或者博客来了解如何创建Spring Boot项目。\[3\] 总结起来,要使用Java实现文本分类,你可以使用中文分词器进行中文分词,使用TF-IDF方法进行文本表示,使用朴素贝叶斯算法进行模型训练和分类预测。同时,你可以创建一个Spring Boot项目来实现这些功能。 #### 引用[.reference_title] - *1* [文本分类算法之--贝叶斯分类算法的实现Java版本](https://blog.csdn.net/u011955252/article/details/50761018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java Spark ML实现的文本分类](https://blog.csdn.net/coderma/article/details/125083708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于weka的中文文本分类(java版)](https://blog.csdn.net/sinat_23225111/article/details/79677048)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值