


Implementieren Sie ein kleines Textklassifizierungssystem mit Python
Hintergrund
Text Mining bezieht sich auf den Prozess, unbekanntes, verständliches und letztendlich nutzbares Wissen aus großen Textdatenmengen zu extrahieren und dieses Wissen zu nutzen, um Informationen für zukünftige Referenzzwecke besser zu organisieren. Das heißt, der Prozess, Wissen aus unstrukturiertem Text zu finden.
Derzeit gibt es 7 Hauptbereiche des Text Mining:
·Such- und Informationsabruf-IR
·Text-Clustering: Verwenden Sie Clustering-Methoden, um Wörter, Fragmente, Absätze oder Dateien zu gruppieren und zu klassifizieren
· Textklassifizierung: Gruppieren und klassifizieren Sie Fragmente, Absätze oder Dateien mithilfe von Data Mining. Basierend auf der Klassifizierungsmethode werden die trainierten beschriftete Instanz Modell
· Web Mining: Daten- und Text-Mining im Internet unter besonderer Berücksichtigung der Größe und Größe des miteinander verbundenen Netzwerks
· Informationsextraktion IE: Identifizieren und extrahieren Sie relevante Fakten und Beziehungen aus unstrukturiertem Text; extrahieren Sie strukturierte Extraktion aus unstrukturiertem oder halbstrukturiertem Text. Der Prozess strukturierter Daten
· Natural Language Processing NLP: Entdecken Sie die wesentliche Struktur der Sprache und ihre ausgedrückte Bedeutung aus der Perspektive der Grammatik und Semantik
Textklassifizierungssystem (Python 3.5)
Die Technologie und der Prozess zur Textklassifizierung in chinesischer Sprache umfassen hauptsächlich die folgenden Schritte:
1. Vorverarbeitung: Entfernen von Textrauschinformationen, wie z. B. HTML-Tag , Textformatkonvertierung, Erkennung von Satzgrenzen
2. Chinesische Wortsegmentierung: Verwenden Sie die chinesische Wortsegmentierung, um den Text zu segmentieren und Stoppwörter zu entfernen.
3. Erstellen Sie einen Wortvektorraum: Zählen Sie die Häufigkeit von Textwörtern und generieren Sie den Wortvektorraum Text
4. Gewichtsstrategie – TF-IDF: Verwenden Sie TF-IDF, um Merkmalswörter zu entdecken und sie als Merkmale zu extrahieren, die das Dokumentthema widerspiegeln
5. Klassifikatoren: Verwenden Sie Algorithmen, um Klassifikatoren zu trainieren
6. Klassifizierungsergebnisse auswerten
a. Wählen Sie den zu verarbeitenden Textbereich aus
b >
·Trainingssatzkorpus- Textressourcen, die in Kategorien klassifiziert wurden
- Der zu klassifizierende Textkorpus kann Teil des Trainingssatzes oder Textkorpus aus externen Quellen sein
xml
Bibliothek zum Entfernen von HTML-TagsD. Satzgrenzen erkennen: Markieren Sie das Ende des Satzes
2. Wortsegmentierung ist der Prozess der Neukombination Kontinuierliche Wortfolgen in Wortfolgen gemäß bestimmten Spezifikationen aufzuteilen. Die Aufteilung einer Folge chinesischer Zeichen (Sätze) in unabhängige Wörter ist in gewisser Weise nicht vollständig Am Ende löste die Wahrscheinlichkeitstheorie dieses Problem. Der Algorithmus basiert auf dem Wahrscheinlichkeitsgrafikmodell. Die Wortsegmentierung ist das grundlegendste und niedrigste Modul in der Verarbeitung natürlicher Sprache Entscheidend für nachfolgende Anwendungen ist die strukturierte Darstellung von Texten oder Sätzen. Derzeit wird die strukturierte Darstellung von Texten in vier Kategorien unterteilt: Wortvektorraum, Agentenmodell und abhängige Baumdarstellung Syntax,Diagrammdarstellung von RDF
. Der Beispielcode für chinesische Wörter ist unten angegeben:# -*- Codierung: utf-8
-*-import os
import jieba
def savefile(savepath, content):
fp = open(savepath,"w",encoding='gb2312', Fehler='ignore')
fp.write(content)
fp.close()
def readfile(path):
fp = open(path,"r", binding= 'gb2312', Fehler='ignore')
content = fp.read()
fp.close()
return content
# corpus_path =
„train_small/“ # Vorhersagebibliothekspfad für die Klassifizierung unsegmentierter Wörter
# seg_path = „train_seg/“ # Klassifizierungskorpuspfad nach der Wortsegmentierung corpus_path = „test_small/“ # Pfad der Vorhersagebibliothek für die Klassifizierung unsegmentierter Wörter seg_path = „test_seg/“ # Klassifizierung nach Wortsegmentierung Corpus pathcatelist=
os.listdir(corpus_path) # Alle Unterverzeichnisse im geänderten Verzeichnis abrufen for mydir in catelist:
class_path = corpus_path + mydir + "/" # Geben Sie das Kategorie-Unterverzeichnis an Der Pfad
seg_dir = seg_path + mydir + "/" # Vorhersage des Kategorieverzeichnisses nach der Wortsegmentierung
if not os.path.exists(seg_dir): # Ob es existiert, erstelle es, wenn es nicht existiert
os.makedirs(seg_dir)
file_list = os.listdir(class_path)
für file_pathin file_list:
fullname = class_path + file_path
content =
readfile(fullname).strip() # Datei lesenInhalt
content = content.replace("rn", "").strip() #Neue Zeilen und zusätzliche Leerzeichen entfernen
content_seg = jieba .cut(content)
savefile(seg_dir + file_path, " ".join(content_seg))
print("Ende der Wortsegmentierung")
Für die nachfolgende Wortgenerierung Zur Vereinfachung des Vektorraummodells müssen diese segmentierten Textinformationen mithilfe der Bunch-Datenstruktur der Scikit-Learn-Bibliothek in Textvektorinformationen umgewandelt und objektiviert werden. Der spezifische Code lautet wie folgt:
import os import pickle from sklearn.datasets.base import Bunch #Bunch 类提供了一种key,value的对象形式 #target_name 所有分类集的名称列表 #label 每个文件的分类标签列表 #filenames 文件路径 #contents 分词后文件词向量形式def readfile(path): fp = open(path, "r", encoding='gb2312', errors='ignore') content = fp.read() fp.close() return content bunch=Bunch(target_name=[],label=[],filenames=[],contents=[]) # wordbag_path="train_word_bag/train_set.dat" # seg_path="train_seg/"wordbag_path="test_word_bag/test_set.dat"seg_path="test_seg/"catelist=os.listdir(seg_path) bunch.target_name.extend(catelist)#将类别信息保存到Bunch对象for mydir in catelist: class_path=seg_path+mydir+"/" file_list=os.listdir(class_path) for file_path in file_list: fullname=class_path+file_path bunch.label.append(mydir)#保存当前文件的分类标签 bunch.filenames.append(fullname)#保存当前文件的文件路径 bunch.contents.append(readfile(fullname).strip())#保存文件词向量 #Bunch对象持久化file_obj=open(wordbag_path,"wb") pickle.dump(bunch,file_obj) file_obj.close() print("构建文本对象结束")
3. Vektorräumliches Modell
Da Text im Speichervektorraum eine höhere Dimension hat, werden bestimmte Wörter vor der Textklassifizierung automatisch herausgefiltert Wörter Oder Wörter werden Stoppwörter genannt. Diese Tabelle mit Stoppwörtern kann hier heruntergeladen werden. 4. Gewichtsstrategie: TF-IDF-Methode
Wenn ein Wort oder eine Phrase in einem Artikel häufig und in anderen Artikeln selten vorkommt, wird dieses Wort berücksichtigt. Oder die Phrase weist eine gute Kategorienunterscheidung auf Fähigkeit und eignet sich zur Klassifizierung.
Bevor wir diesen Teil des Codes angeben, werfen wir zunächst einen Blick auf die Konzepte der Worthäufigkeit und der umgekehrten Dateihäufigkeit.
Worthäufigkeit (TF): bezieht sich auf das Vorkommen eines bestimmten Wortes in der Datei Frequenz. Diese Zahl ist die Normalisierung der Anzahl der Wörter, um zu verhindern, dass sie zu langen Dokumenten tendiert. Die Bedeutung eines Wortes in einem bestimmten Dokument kann wie folgt ausgedrückt werden:
Der Zähler ist die Anzahl der Wörter im Dokument Der Nenner ist die Summe der Häufigkeit aller Wörter im Dokument
Die inverse Dokumenthäufigkeit (IDF) ist ein Maß für die allgemeine Bedeutung eines Wortes. Die IDF eines bestimmten Wortes kann berechnet werden die Gesamthäufigkeit des Dokuments. Teilen Sie die Zahl durch die Anzahl der Dateien, die das Wort enthalten, und bilden Sie dann den Logarithmus des Quotienten:
|D| ist die Gesamtzahl der Dateien im Korpus, j ist die Anzahl der Dateien Wenn das Wort enthalten ist und das Wort nicht im Korpus enthalten ist, ist der Nenner Null. Daher wird im Allgemeinen eine zusätzliche 1
zum Nenner hinzugefügt, um das Produkt aus Worthäufigkeit und umgekehrter Dateihäufigkeit zu berechnen Die Häufigkeit hoher Wörter in einer bestimmten Datei und die Häufigkeit des Wortes in der gesamten Dokumentensammlung können zu hoch gewichtetem TF-IDF führen, sodass TF-IDF dazu neigt, häufig vorkommende Wörter herauszufiltern und wichtige Wörter beizubehalten. Der Code lautet wie folgt:
5. Verwenden Sie das Naive-Bayes-Klassifizierungsmodulimport os from sklearn.datasets.base import Bunch import pickle#持久化类from sklearn import feature_extraction from sklearn.feature_extraction.text import TfidfTransformer#TF-IDF向量转换类from sklearn.feature_extraction.text import TfidfVectorizer#TF-IDF向量生成类def readbunchobj(path): file_obj=open(path,"rb") bunch=pickle.load(file_obj) file_obj.close() return bunch def writebunchobj(path,bunchobj): file_obj=open(path,"wb") pickle.dump(bunchobj,file_obj) file_obj.close() def readfile(path): fp = open(path, "r", encoding='gb2312', errors='ignore') content = fp.read() fp.close() return content path="train_word_bag/train_set.dat"bunch=readbunchobj(path) #停用词stopword_path="train_word_bag/hlt_stop_words.txt"stpwrdlst=readfile(stopword_path).splitlines() #构建TF-IDF词向量空间对象tfidfspace=Bunch(target_name=bunch.target_name,label=bunch.label,filenames=bunch.filenames,tdm=[],vocabulary={}) #使用TfidVectorizer初始化向量空间模型vectorizer=TfidfVectorizer(stop_words=stpwrdlst,sublinear_tf=True,max_df=0.5) transfoemer=TfidfTransformer()#该类会统计每个词语的TF-IDF权值 #文本转为词频矩阵,单独保存字典文件tfidfspace.tdm=vectorizer.fit_transform(bunch.contents) tfidfspace.vocabulary=vectorizer.vocabulary_ #创建词袋的持久化space_path="train_word_bag/tfidfspace.dat"writebunchobj(space_path,tfidfspace)
Zu den häufig verwendeten Textklassifizierungsmethoden gehören die kNN-Nearest-Neighbor-Methode, der Naive-Bayes-Algorithmus und der Support-Vector-Machine-Algorithmus In Bezug auf:
Der kNN-Algorithmus ist ursprünglich der einfachste mit akzeptabler Klassifizierungsgenauigkeit, aber er ist der schnellste.
Der Naive-Bayes-Algorithmus hat die beste Wirkung bei der Kurztextklassifizierung mit hoher Genauigkeit
Der Vorteil des Support Vector Machine-Algorithmus besteht darin, dass er den Fall der linearen Untrennbarkeit unterstützt und die Genauigkeit durchschnittlich ist
上文代码中进行操作的都是训练集的数据,下面是测试集(抽取字训练集),训练步骤和训练集相同,首先是分词,之后生成词向量文件,直至生成词向量模型,不同的是,在训练词向量模型时需要加载训练集词袋,将测试集产生的词向量映射到训练集词袋的词典中,生成向量空间模型,代码如下:
import os from sklearn.datasets.base import Bunch import pickle#持久化类from sklearn import feature_extraction from sklearn.feature_extraction.text import TfidfTransformer#TF-IDF向量转换类from sklearn.feature_extraction.text import TfidfVectorizer#TF-IDF向量生成类from TF_IDF import space_path def readbunchobj(path): file_obj=open(path,"rb") bunch=pickle.load(file_obj) file_obj.close() return bunch def writebunchobj(path,bunchobj): file_obj=open(path,"wb") pickle.dump(bunchobj,file_obj) file_obj.close() def readfile(path): fp = open(path, "r", encoding='gb2312', errors='ignore') content = fp.read() fp.close() return content #导入分词后的词向量bunch对象path="test_word_bag/test_set.dat"bunch=readbunchobj(path) #停用词stopword_path="train_word_bag/hlt_stop_words.txt"stpwrdlst=readfile(stopword_path).splitlines() #构建测试集TF-IDF向量空间testspace=Bunch(target_name=bunch.target_name,label=bunch.label,filenames=bunch.filenames,tdm=[],vocabulary={}) #导入训练集的词袋trainbunch=readbunchobj("train_word_bag/tfidfspace.dat") #使用TfidfVectorizer初始化向量空间vectorizer=TfidfVectorizer(stop_words=stpwrdlst,sublinear_tf=True,max_df=0.5,vocabulary=trainbunch.vocabulary) transformer=TfidfTransformer(); testspace.tdm=vectorizer.fit_transform(bunch.contents) testspace.vocabulary=trainbunch.vocabulary #创建词袋的持久化space_path="test_word_bag/testspace.dat"writebunchobj(space_path,testspace)
下面执行多项式贝叶斯算法进行测试文本分类并返回精度,代码如下:
import pickle from sklearn.naive_bayes import MultinomialNB # 导入多项式贝叶斯算法包 def readbunchobj(path): file_obj = open(path, "rb") bunch = pickle.load(file_obj) file_obj.close() return bunch # 导入训练集向量空间trainpath = "train_word_bag/tfidfspace.dat"train_set = readbunchobj(trainpath) # d导入测试集向量空间testpath = "test_word_bag/testspace.dat"test_set = readbunchobj(testpath) # 应用贝叶斯算法 # alpha:0.001 alpha 越小,迭代次数越多,精度越高clf = MultinomialNB(alpha=0.001).fit(train_set.tdm, train_set.label) # 预测分类结果predicted = clf.predict(test_set.tdm) total = len(predicted);rate = 0 for flabel, file_name, expct_cate in zip(test_set.label, test_set.filenames, predicted): if flabel != expct_cate: rate += 1 print(file_name, ": 实际类别:", flabel, "-->预测分类:", expct_cate) # 精度print("error_rate:", float(rate) * 100 / float(total), "%")
6.分类结果评估
机器学习领域的算法评估有三个基本指标:
· 召回率(recall rate,查全率):是检索出的相关文档数与文档库中所有相关文档的比率,衡量的是检索系统的查全率
召回率=系统检索到的相关文件/系统所有相关的文件综述
· 准确率(Precision,精度):是检索出的相关文档数于检索出的文档总数的比率,衡量的是检索系统的查准率
准确率=系统检索到的相关文件/系统所有的检索到的文件数
准确率和召回率是相互影响的,理想情况下是二者都高,但是一般情况下准确率高,召回率就低;召回率高,准确率就低
· F-Score():计算公式为:
当=1时就是最常见的-Measure
三者关系如下:
具体评估代码如下:
import numpy as np from sklearn import metrics #评估def metrics_result(actual,predict): print("精度:{0:.3f}".format(metrics.precision_score(actual,predict))) print("召回:{0:0.3f}".format(metrics.recall_score(actual,predict))) print("f1-score:{0:.3f}".format(metrics.f1_score(actual,predict))) metrics_result(test_set.label,predicted) 中文文本语料 中文停用词文本集合 工程全部代码 原文链接
Das obige ist der detaillierte Inhalt vonImplementieren Sie ein kleines Textklassifizierungssystem mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL hat eine kostenlose Community -Version und eine kostenpflichtige Enterprise -Version. Die Community -Version kann kostenlos verwendet und geändert werden, die Unterstützung ist jedoch begrenzt und für Anwendungen mit geringen Stabilitätsanforderungen und starken technischen Funktionen geeignet. Die Enterprise Edition bietet umfassende kommerzielle Unterstützung für Anwendungen, die eine stabile, zuverlässige Hochleistungsdatenbank erfordern und bereit sind, Unterstützung zu bezahlen. Zu den Faktoren, die bei der Auswahl einer Version berücksichtigt werden, gehören Kritikalität, Budgetierung und technische Fähigkeiten von Anwendungen. Es gibt keine perfekte Option, nur die am besten geeignete Option, und Sie müssen die spezifische Situation sorgfältig auswählen.

Der Artikel führt den Betrieb der MySQL -Datenbank vor. Zunächst müssen Sie einen MySQL -Client wie MySQLworkBench oder Befehlszeilen -Client installieren. 1. Verwenden Sie den Befehl mySQL-uroot-P, um eine Verbindung zum Server herzustellen und sich mit dem Stammkonto-Passwort anzumelden. 2. Verwenden Sie die Erstellung von Createdatabase, um eine Datenbank zu erstellen, und verwenden Sie eine Datenbank aus. 3.. Verwenden Sie CreateTable, um eine Tabelle zu erstellen, Felder und Datentypen zu definieren. 4. Verwenden Sie InsertInto, um Daten einzulegen, Daten abzufragen, Daten nach Aktualisierung zu aktualisieren und Daten nach Löschen zu löschen. Nur indem Sie diese Schritte beherrschen, lernen, mit gemeinsamen Problemen umzugehen und die Datenbankleistung zu optimieren, können Sie MySQL effizient verwenden.

Die MySQL -Download -Datei ist beschädigt. Was soll ich tun? Wenn Sie MySQL herunterladen, können Sie die Korruption der Datei begegnen. Es ist heutzutage wirklich nicht einfach! In diesem Artikel wird darüber gesprochen, wie dieses Problem gelöst werden kann, damit jeder Umwege vermeiden kann. Nach dem Lesen können Sie nicht nur das beschädigte MySQL -Installationspaket reparieren, sondern auch ein tieferes Verständnis des Download- und Installationsprozesses haben, um zu vermeiden, dass Sie in Zukunft stecken bleiben. Lassen Sie uns zunächst darüber sprechen, warum das Herunterladen von Dateien beschädigt wird. Dafür gibt es viele Gründe. Netzwerkprobleme sind der Schuldige. Unterbrechung des Download -Prozesses und der Instabilität im Netzwerk kann zu einer Korruption von Dateien führen. Es gibt auch das Problem mit der Download -Quelle selbst. Die Serverdatei selbst ist gebrochen und natürlich auch unterbrochen, wenn Sie sie herunterladen. Darüber hinaus kann das übermäßige "leidenschaftliche" Scannen einer Antiviren -Software auch zu einer Beschädigung von Dateien führen. Diagnoseproblem: Stellen Sie fest, ob die Datei wirklich beschädigt ist

Die Hauptgründe für den Fehler bei MySQL -Installationsfehlern sind: 1. Erlaubnisprobleme, Sie müssen als Administrator ausgeführt oder den Sudo -Befehl verwenden. 2. Die Abhängigkeiten fehlen, und Sie müssen relevante Entwicklungspakete installieren. 3. Portkonflikte müssen Sie das Programm schließen, das Port 3306 einnimmt, oder die Konfigurationsdatei ändern. 4. Das Installationspaket ist beschädigt. Sie müssen die Integrität herunterladen und überprüfen. 5. Die Umgebungsvariable ist falsch konfiguriert und die Umgebungsvariablen müssen korrekt entsprechend dem Betriebssystem konfiguriert werden. Lösen Sie diese Probleme und überprüfen Sie jeden Schritt sorgfältig, um MySQL erfolgreich zu installieren.

Die MySQL-Datenbankleistung Optimierungshandbuch In ressourcenintensiven Anwendungen spielt die MySQL-Datenbank eine entscheidende Rolle und ist für die Verwaltung massiver Transaktionen verantwortlich. Mit der Erweiterung der Anwendung werden jedoch die Datenbankleistung Engpässe häufig zu einer Einschränkung. In diesem Artikel werden eine Reihe effektiver Strategien zur Leistungsoptimierung von MySQL -Leistung untersucht, um sicherzustellen, dass Ihre Anwendung unter hohen Lasten effizient und reaktionsschnell bleibt. Wir werden tatsächliche Fälle kombinieren, um eingehende Schlüsseltechnologien wie Indexierung, Abfrageoptimierung, Datenbankdesign und Caching zu erklären. 1. Das Design der Datenbankarchitektur und die optimierte Datenbankarchitektur sind der Eckpfeiler der MySQL -Leistungsoptimierung. Hier sind einige Kernprinzipien: Die Auswahl des richtigen Datentyps und die Auswahl des kleinsten Datentyps, der den Anforderungen entspricht, kann nicht nur Speicherplatz speichern, sondern auch die Datenverarbeitungsgeschwindigkeit verbessern.

MySQL hat sich geweigert, anzufangen? Nicht in Panik, lass es uns ausprobieren! Viele Freunde stellten fest, dass der Service nach der Installation von MySQL nicht begonnen werden konnte, und sie waren so ängstlich! Mach dir keine Sorgen, dieser Artikel wird dich dazu bringen, ruhig damit umzugehen und den Mastermind dahinter herauszufinden! Nachdem Sie es gelesen haben, können Sie dieses Problem nicht nur lösen, sondern auch Ihr Verständnis von MySQL -Diensten und Ihren Ideen zur Fehlerbehebungsproblemen verbessern und zu einem leistungsstärkeren Datenbankadministrator werden! Der MySQL -Dienst startete nicht und es gibt viele Gründe, von einfachen Konfigurationsfehlern bis hin zu komplexen Systemproblemen. Beginnen wir mit den häufigsten Aspekten. Grundkenntnisse: Eine kurze Beschreibung des Service -Startup -Prozesses MySQL Service Startup. Einfach ausgedrückt, lädt das Betriebssystem MySQL-bezogene Dateien und startet dann den MySQL-Daemon. Dies beinhaltet die Konfiguration

Die MySQL -Leistungsoptimierung muss von drei Aspekten beginnen: Installationskonfiguration, Indexierung und Abfrageoptimierung, Überwachung und Abstimmung. 1. Nach der Installation müssen Sie die my.cnf -Datei entsprechend der Serverkonfiguration anpassen, z. 2. Erstellen Sie einen geeigneten Index, um übermäßige Indizes zu vermeiden und Abfrageanweisungen zu optimieren, z. B. den Befehl Erklärung zur Analyse des Ausführungsplans; 3. Verwenden Sie das eigene Überwachungstool von MySQL (ShowProcessList, Showstatus), um die Datenbankgesundheit zu überwachen und die Datenbank regelmäßig zu sichern und zu organisieren. Nur durch kontinuierliche Optimierung dieser Schritte kann die Leistung der MySQL -Datenbank verbessert werden.

MySQL kann ohne Netzwerkverbindungen für die grundlegende Datenspeicherung und -verwaltung ausgeführt werden. Für die Interaktion mit anderen Systemen, Remotezugriff oder Verwendung erweiterte Funktionen wie Replikation und Clustering ist jedoch eine Netzwerkverbindung erforderlich. Darüber hinaus sind Sicherheitsmaßnahmen (wie Firewalls), Leistungsoptimierung (Wählen Sie die richtige Netzwerkverbindung) und die Datensicherung für die Verbindung zum Internet von entscheidender Bedeutung.
