言
文本分類是商業(yè)問題中常見的自然語言處理任務(wù),目標(biāo)是自動將文本文件分到一個或多個已定義好的類別中。文本分類的一些例子如下:
目錄
本文將詳細(xì)介紹文本分類問題并用Python實(shí)現(xiàn)這個過程:
文本分類是有監(jiān)督學(xué)習(xí)的一個例子,它使用包含文本文檔和標(biāo)簽的數(shù)據(jù)集來訓(xùn)練一個分類器。端到端的文本分類訓(xùn)練主要由三個部分組成:
1. 準(zhǔn)備數(shù)據(jù)集:第一步是準(zhǔn)備數(shù)據(jù)集,包括加載數(shù)據(jù)集和執(zhí)行基本預(yù)處理,然后把數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集。
特征工程:第二步是特征工程,將原始數(shù)據(jù)集被轉(zhuǎn)換為用于訓(xùn)練機(jī)器學(xué)習(xí)模型的平坦特征(flat features),并從現(xiàn)有數(shù)據(jù)特征創(chuàng)建新的特征。
2. 模型訓(xùn)練:最后一步是建模,利用標(biāo)注數(shù)據(jù)集訓(xùn)練機(jī)器學(xué)習(xí)模型。
3. 進(jìn)一步提高分類器性能:本文還將討論用不同的方法來提高文本分類器的性能。
注意:本文不深入講述NLP任務(wù),如果你想先復(fù)習(xí)下基礎(chǔ)知識,可以通過這篇文章
https://www.analyticsvidhya.com/blog/2017/01/ultimate-guide-to-understand-implement-natural-language-processing-codes-in-python/
準(zhǔn)備好你的機(jī)器
先安裝基本組件,創(chuàng)建Python的文本分類框架。首先導(dǎo)入所有所需的庫。如果你沒有安裝這些庫,可以通過以下官方鏈接來安裝它們。
#導(dǎo)入數(shù)據(jù)集預(yù)處理、特征工程和模型訓(xùn)練所需的庫
from sklearn import model_selection, preprocessing, linear_model, naive_bayes, metrics, svm
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn import decomposition, ensemble
import pandas, xgboost, numpy, textblob, string
from keras.preprocessing import text, sequence
from keras import layers, models, optimizers
一、準(zhǔn)備數(shù)據(jù)集
在本文中,我使用亞馬遜的評論數(shù)據(jù)集,它可以從這個鏈接下載:
https://gist.github.com/kunalj101/ad1d9c58d338e20d09ff26bcc06c4235
這個數(shù)據(jù)集包含3.6M的文本評論內(nèi)容及其標(biāo)簽,我們只使用其中一小部分?jǐn)?shù)據(jù)。首先,將下載的數(shù)據(jù)加載到包含兩個列(文本和標(biāo)簽)的pandas的數(shù)據(jù)結(jié)構(gòu)(dataframe)中。
數(shù)據(jù)集鏈接:
https://drive.google.com/drive/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M
#加載數(shù)據(jù)集
data = open('data/corpus').read()
labels, texts = [], []
for i, line in enumerate(data.split("\n")):
content = line.split()
labels.append(content[0])
texts.append(content[1])
#創(chuàng)建一個dataframe,列名為text和label
trainDF = pandas.DataFrame()
trainDF['text'] = texts
trainDF['label'] = labels
接下來,我們將數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集,這樣我們可以訓(xùn)練和測試分類器。另外,我們將編碼我們的目標(biāo)列,以便它可以在機(jī)器學(xué)習(xí)模型中使用:
#將數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(trainDF['text'], trainDF['label'])
# label編碼為目標(biāo)變量
encoder = preprocessing.LabelEncoder()
train_y = encoder.fit_transform(train_y)
valid_y = encoder.fit_transform(valid_y)
二、特征工程
接下來是特征工程,在這一步,原始數(shù)據(jù)將被轉(zhuǎn)換為特征向量,另外也會根據(jù)現(xiàn)有的數(shù)據(jù)創(chuàng)建新的特征。為了從數(shù)據(jù)集中選出重要的特征,有以下幾種方式:
接下來分別看看它們?nèi)绾螌?shí)現(xiàn):
2.1 計數(shù)向量作為特征
計數(shù)向量是數(shù)據(jù)集的矩陣表示,其中每行代表來自語料庫的文檔,每列表示來自語料庫的術(shù)語,并且每個單元格表示特定文檔中特定術(shù)語的頻率計數(shù):
#創(chuàng)建一個向量計數(shù)器對象
count_vect = CountVectorizer(analyzer='word', token_pattern=r'\w{1,}')
count_vect.fit(trainDF['text'])
#使用向量計數(shù)器對象轉(zhuǎn)換訓(xùn)練集和驗(yàn)證集
xtrain_count = count_vect.transform(train_x)
xvalid_count = count_vect.transform(valid_x)
2.2 TF-IDF向量作為特征
TF-IDF的分?jǐn)?shù)代表了詞語在文檔和整個語料庫中的相對重要性。TF-IDF分?jǐn)?shù)由兩部分組成:第一部分是計算標(biāo)準(zhǔn)的詞語頻率(TF),第二部分是逆文檔頻率(IDF)。其中計算語料庫中文檔總數(shù)除以含有該詞語的文檔數(shù)量,然后再取對數(shù)就是逆文檔頻率。
TF(t)=(該詞語在文檔出現(xiàn)的次數(shù))/(文檔中詞語的總數(shù))
IDF(t)= log_e(文檔總數(shù)/出現(xiàn)該詞語的文檔總數(shù))
TF-IDF向量可以由不同級別的分詞產(chǎn)生(單個詞語,詞性,多個詞(n-grams))
#詞語級tf-idf
tfidf_vect = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}', max_features=5000)
tfidf_vect.fit(trainDF['text'])
xtrain_tfidf = tfidf_vect.transform(train_x)
xvalid_tfidf = tfidf_vect.transform(valid_x)
# ngram 級tf-idf
tfidf_vect_ngram = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}', ngram_range=(2,3), max_features=5000)
tfidf_vect_ngram.fit(trainDF['text'])
xtrain_tfidf_ngram = tfidf_vect_ngram.transform(train_x)
xvalid_tfidf_ngram = tfidf_vect_ngram.transform(valid_x)
#詞性級tf-idf
tfidf_vect_ngram_chars = TfidfVectorizer(analyzer='char', token_pattern=r'\w{1,}', ngram_range=(2,3), max_features=5000)
tfidf_vect_ngram_chars.fit(trainDF['text'])
xtrain_tfidf_ngram_chars = tfidf_vect_ngram_chars.transform(train_x)
xvalid_tfidf_ngram_chars = tfidf_vect_ngram_chars.transform(valid_x)
2.3 詞嵌入
詞嵌入是使用稠密向量代表詞語和文檔的一種形式。向量空間中單詞的位置是從該單詞在文本中的上下文學(xué)習(xí)到的,詞嵌入可以使用輸入語料本身訓(xùn)練,也可以使用預(yù)先訓(xùn)練好的詞嵌入模型生成,詞嵌入模型有:Glove, FastText,Word2Vec。它們都可以下載,并用遷移學(xué)習(xí)的方式使用。想了解更多的詞嵌入資料,可以訪問:
https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/
接下來介紹如何在模型中使用預(yù)先訓(xùn)練好的詞嵌入模型,主要有四步:
1. 加載預(yù)先訓(xùn)練好的詞嵌入模型
2. 創(chuàng)建一個分詞對象
3. 將文本文檔轉(zhuǎn)換為分詞序列并填充它們
4. 創(chuàng)建分詞和各自嵌入的映射
#加載預(yù)先訓(xùn)練好的詞嵌入向量
embeddings_index = {}
for i, line in enumerate(open('data/wiki-news-300d-1M.vec')):
values = line.split()
embeddings_index[values[0]] = numpy.asarray(values[1:], dtype='float32')
#創(chuàng)建一個分詞器
token = text.Tokenizer()
token.fit_on_texts(trainDF['text'])
word_index = token.word_index
#將文本轉(zhuǎn)換為分詞序列,并填充它們保證得到相同長度的向量
train_seq_x = sequence.pad_sequences(token.texts_to_sequences(train_x), maxlen=70)
valid_seq_x = sequence.pad_sequences(token.texts_to_sequences(valid_x), maxlen=70)
#創(chuàng)建分詞嵌入映射
embedding_matrix = numpy.zeros((len(word_index) + 1, 300))
for word, i in word_index.items():
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
2.4 基于文本/NLP的特征
創(chuàng)建許多額外基于文本的特征有時可以提升模型效果。比如下面的例子:
這些特征有很強(qiáng)的實(shí)驗(yàn)性質(zhì),應(yīng)該具體問題具體分析。
trainDF['char_count'] = trainDF['text'].apply(len)
trainDF['word_count'] = trainDF['text'].apply(lambda x: len(x.split()))
trainDF['word_density'] = trainDF['char_count'] / (trainDF['word_count']+1)
trainDF['punctuation_count'] = trainDF['text'].apply(lambda x: len("".join(_ for _ in x if _ in string.punctuation)))
trainDF['title_word_count'] = trainDF['text'].apply(lambda x: len([wrd for wrd in x.split() if wrd.istitle()]))
trainDF['upper_case_word_count'] = trainDF['text'].apply(lambda x: len([wrd for wrd in x.split() if wrd.isupper()]))
trainDF['char_count'] = trainDF['text'].apply(len)
trainDF['word_count'] = trainDF['text'].apply(lambda x: len(x.split()))
trainDF['word_density'] = trainDF['char_count'] / (trainDF['word_count']+1)
trainDF['punctuation_count'] = trainDF['text'].apply(lambda x: len("".join(_ for _ in x if _ in string.punctuation)))
trainDF['title_word_count'] = trainDF['text'].apply(lambda x: len([wrd for wrd in x.split() if wrd.istitle()]))
trainDF['upper_case_word_count'] = trainDF['text'].apply(lambda x: len([wrd for wrd in x.split() if wrd.isupper()]))
pos_family = {
'noun' : ['NN','NNS','NNP','NNPS'],
'pron' : ['PRP','PRP$','WP','WP$'],
'verb' : ['VB','VBD','VBG','VBN','VBP','VBZ'],
'adj' : ['JJ','JJR','JJS'],
'adv' : ['RB','RBR','RBS','WRB']
}
#檢查和獲得特定句子中的單詞的詞性標(biāo)簽數(shù)量
def check_pos_tag(x, flag):
cnt = 0
try:
wiki = textblob.TextBlob(x)
for tup in wiki.tags:
ppo = list(tup)[1]
if ppo in pos_family[flag]:
cnt += 1
except:
pass
return cnt
trainDF['noun_count'] = trainDF['text'].apply(lambda x: check_pos_tag(x, 'noun'))
trainDF['verb_count'] = trainDF['text'].apply(lambda x: check_pos_tag(x, 'verb'))
trainDF['adj_count'] = trainDF['text'].apply(lambda x: check_pos_tag(x, 'adj'))
trainDF['adv_count'] = trainDF['text'].apply(lambda x: check_pos_tag(x, 'adv'))
trainDF['pron_count'] = trainDF['text'].apply(lambda x: check_pos_tag(x, 'pron'))
2.5 主題模型作為特征
主題模型是從包含重要信息的文檔集中識別詞組(主題)的技術(shù),我已經(jīng)使用LDA生成主題模型特征。LDA是一個從固定數(shù)量的主題開始的迭代模型,每一個主題代表了詞語的分布,每一個文檔表示了主題的分布。雖然分詞本身沒有意義,但是由主題表達(dá)出的詞語的概率分布可以傳達(dá)文檔思想。如果想了解更多主題模型,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2016/08/beginners-guide-to-topic-modeling-in-python/
我們看看主題模型運(yùn)行過程:
#訓(xùn)練主題模型
lda_model = decomposition.LatentDirichletAllocation(n_components=20, learning_method='online', max_iter=20)
X_topics = lda_model.fit_transform(xtrain_count)
topic_word = lda_model.components_
vocab = count_vect.get_feature_names()
#可視化主題模型
n_top_words = 10
topic_summaries = []
for i, topic_dist in enumerate(topic_word):
topic_words = numpy.array(vocab)[numpy.argsort(topic_dist)][:-(n_top_words+1):-1]
topic_summaries.append(' '.join(topic_words)
三、建模
文本分類框架的最后一步是利用之前創(chuàng)建的特征訓(xùn)練一個分類器。關(guān)于這個最終的模型,機(jī)器學(xué)習(xí)中有很多模型可供選擇。我們將使用下面不同的分類器來做文本分類:
接下來我們詳細(xì)介紹并使用這些模型。下面的函數(shù)是訓(xùn)練模型的通用函數(shù),它的輸入是分類器、訓(xùn)練數(shù)據(jù)的特征向量、訓(xùn)練數(shù)據(jù)的標(biāo)簽,驗(yàn)證數(shù)據(jù)的特征向量。我們使用這些輸入訓(xùn)練一個模型,并計算準(zhǔn)確度。
def train_model(classifier, feature_vector_train, label, feature_vector_valid, is_neural_net=False):
# fit the training dataset on the classifier
classifier.fit(feature_vector_train, label)
# predict the labels on validation dataset
predictions = classifier.predict(feature_vector_valid)
if is_neural_net:
predictions = predictions.argmax(axis=-1)
return metrics.accuracy_score(predictions, valid_y)
3.1 樸素貝葉斯
利用sklearn框架,在不同的特征下實(shí)現(xiàn)樸素貝葉斯模型。
樸素貝葉斯是一種基于貝葉斯定理的分類技術(shù),并且假設(shè)預(yù)測變量是獨(dú)立的。樸素貝葉斯分類器假設(shè)一個類別中的特定特征與其它存在的特征沒有任何關(guān)系。
想了解樸素貝葉斯算法細(xì)節(jié)可點(diǎn)擊:
A Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature
#特征為計數(shù)向量的樸素貝葉斯
accuracy = train_model(naive_bayes.MultinomialNB(), xtrain_count, train_y, xvalid_count)
print "NB, Count Vectors: ", accuracy
#特征為詞語級別TF-IDF向量的樸素貝葉斯
accuracy = train_model(naive_bayes.MultinomialNB(), xtrain_tfidf, train_y, xvalid_tfidf)
print "NB, WordLevel TF-IDF: ", accuracy
#特征為多個詞語級別TF-IDF向量的樸素貝葉斯
accuracy = train_model(naive_bayes.MultinomialNB(), xtrain_tfidf_ngram, train_y, xvalid_tfidf_ngram)
print "NB, N-Gram Vectors: ", accuracy
#特征為詞性級別TF-IDF向量的樸素貝葉斯
accuracy = train_model(naive_bayes.MultinomialNB(), xtrain_tfidf_ngram_chars, train_y, xvalid_tfidf_ngram_chars)
print "NB, CharLevel Vectors: ", accuracy
#輸出結(jié)果
NB, Count Vectors: 0.7004
NB, WordLevel TF-IDF: 0.7024
NB, N-Gram Vectors: 0.5344
NB, CharLevel Vectors: 0.6872
3.2 線性分類器
實(shí)現(xiàn)一個線性分類器(Logistic Regression):Logistic回歸通過使用logistic / sigmoid函數(shù)估計概率來度量類別因變量與一個或多個獨(dú)立變量之間的關(guān)系。如果想了解更多關(guān)于logistic回歸,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2015/10/basics-logistic-regression/
# Linear Classifier on Count Vectors
accuracy = train_model(linear_model.LogisticRegression(), xtrain_count, train_y, xvalid_count)
print "LR, Count Vectors: ", accuracy
#特征為詞語級別TF-IDF向量的線性分類器
accuracy = train_model(linear_model.LogisticRegression(), xtrain_tfidf, train_y, xvalid_tfidf)
print "LR, WordLevel TF-IDF: ", accuracy
#特征為多個詞語級別TF-IDF向量的線性分類器
accuracy = train_model(linear_model.LogisticRegression(), xtrain_tfidf_ngram, train_y, xvalid_tfidf_ngram)
print "LR, N-Gram Vectors: ", accuracy
#特征為詞性級別TF-IDF向量的線性分類器
accuracy = train_model(linear_model.LogisticRegression(), xtrain_tfidf_ngram_chars, train_y, xvalid_tfidf_ngram_chars)
print "LR, CharLevel Vectors: ", accuracy
#輸出結(jié)果
LR, Count Vectors: 0.7048
LR, WordLevel TF-IDF: 0.7056
LR, N-Gram Vectors: 0.4896
LR, CharLevel Vectors: 0.7012
3.3 實(shí)現(xiàn)支持向量機(jī)模型
支持向量機(jī)(SVM)是監(jiān)督學(xué)習(xí)算法的一種,它可以用來做分類或回歸。該模型提取了分離兩個類的最佳超平面或線。如果想了解更多關(guān)于SVM,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2017/09/understaing-support-vector-machine-example-code/
#特征為多個詞語級別TF-IDF向量的SVM
accuracy = train_model(svm.SVC(), xtrain_tfidf_ngram, train_y, xvalid_tfidf_ngram)
print "SVM, N-Gram Vectors: ", accuracy
#輸出結(jié)果
SVM, N-Gram Vectors: 0.5296
3.4 Bagging Model
實(shí)現(xiàn)一個隨機(jī)森林模型:隨機(jī)森林是一種集成模型,更準(zhǔn)確地說是Bagging model。它是基于樹模型家族的一部分。如果想了解更多關(guān)于隨機(jī)森林,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2014/06/introduction-random-forest-simplified/
#特征為計數(shù)向量的RF
accuracy = train_model(ensemble.RandomForestClassifier(), xtrain_count, train_y, xvalid_count)
print "RF, Count Vectors: ", accuracy
#特征為詞語級別TF-IDF向量的RF
accuracy = train_model(ensemble.RandomForestClassifier(), xtrain_tfidf, train_y, xvalid_tfidf)
print "RF, WordLevel TF-IDF: ", accuracy
#輸出結(jié)果
RF, Count Vectors: 0.6972
RF, WordLevel TF-IDF: 0.6988
3.5 Boosting Model
實(shí)現(xiàn)一個Xgboost模型:Boosting model是另外一種基于樹的集成模型。Boosting是一種機(jī)器學(xué)習(xí)集成元算法,主要用于減少模型的偏差,它是一組機(jī)器學(xué)習(xí)算法,可以把弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器。其中弱學(xué)習(xí)器指的是與真實(shí)類別只有輕微相關(guān)的分類器(比隨機(jī)猜測要好一點(diǎn))。如果想了解更多,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2016/01/xgboost-algorithm-easy-steps/
#特征為計數(shù)向量的Xgboost
accuracy = train_model(xgboost.XGBClassifier(), xtrain_count.tocsc(), train_y, xvalid_count.tocsc())
print "Xgb, Count Vectors: ", accuracy
#特征為詞語級別TF-IDF向量的Xgboost
accuracy = train_model(xgboost.XGBClassifier(), xtrain_tfidf.tocsc(), train_y, xvalid_tfidf.tocsc())
print "Xgb, WordLevel TF-IDF: ", accuracy
#特征為詞性級別TF-IDF向量的Xgboost
accuracy = train_model(xgboost.XGBClassifier(), xtrain_tfidf_ngram_chars.tocsc(), train_y, xvalid_tfidf_ngram_chars.tocsc())
print "Xgb, CharLevel Vectors: ", accuracy
#輸出結(jié)果
Xgb, Count Vectors: 0.6324
Xgb, WordLevel TF-IDF: 0.6364
Xgb, CharLevel Vectors: 0.6548
3.6 淺層神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)被設(shè)計成與生物神經(jīng)元和神經(jīng)系統(tǒng)類似的數(shù)學(xué)模型,這些模型用于發(fā)現(xiàn)被標(biāo)注數(shù)據(jù)中存在的復(fù)雜模式和關(guān)系。一個淺層神經(jīng)網(wǎng)絡(luò)主要包含三層神經(jīng)元-輸入層、隱藏層、輸出層。如果想了解更多關(guān)于淺層神經(jīng)網(wǎng)絡(luò),請?jiān)L問:
https://www.analyticsvidhya.com/blog/2017/05/neural-network-from-scratch-in-python-and-r/
def create_model_architecture(input_size):
# create input layer
input_layer = layers.Input((input_size, ), sparse=True)
# create hidden layer
hidden_layer = layers.Dense(100, activation="relu")(input_layer)
# create output layer
output_layer = layers.Dense(1, activation="sigmoid")(hidden_layer)
classifier = models.Model(inputs = input_layer, outputs = output_layer)
classifier.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return classifier
classifier = create_model_architecture(xtrain_tfidf_ngram.shape[1])
accuracy = train_model(classifier, xtrain_tfidf_ngram, train_y, xvalid_tfidf_ngram, is_neural_net=True)
print "NN, Ngram Level TF IDF Vectors", accuracy
#輸出結(jié)果:
Epoch 1/1
7500/7500 [==============================] - 1s 67us/step - loss: 0.6909
NN, Ngram Level TF IDF Vectors 0.5296
3.7 深層神經(jīng)網(wǎng)絡(luò)
深層神經(jīng)網(wǎng)絡(luò)是更復(fù)雜的神經(jīng)網(wǎng)絡(luò),其中隱藏層執(zhí)行比簡單Sigmoid或Relu激活函數(shù)更復(fù)雜的操作。不同類型的深層學(xué)習(xí)模型都可以應(yīng)用于文本分類問題。
卷積神經(jīng)網(wǎng)絡(luò)中,輸入層上的卷積用來計算輸出。本地連接結(jié)果中,每一個輸入單元都會連接到輸出神經(jīng)元上。每一層網(wǎng)絡(luò)都應(yīng)用不同的濾波器(filter)并組合它們的結(jié)果。
如果想了解更多關(guān)于卷積神經(jīng)網(wǎng)絡(luò),請?jiān)L問:
https://www.analyticsvidhya.com/blog/2017/06/architecture-of-convolutional-neural-networks-simplified-demystified/
def create_cnn():
# Add an Input Layer
input_layer = layers.Input((70, ))
# Add the word embedding Layer
embedding_layer = layers.Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
# Add the convolutional Layer
conv_layer = layers.Convolution1D(100, 3, activation="relu")(embedding_layer)
# Add the pooling Layer
pooling_layer = layers.GlobalMaxPool1D()(conv_layer)
# Add the output Layers
output_layer1 = layers.Dense(50, activation="relu")(pooling_layer)
output_layer1 = layers.Dropout(0.25)(output_layer1)
output_layer2 = layers.Dense(1, activation="sigmoid")(output_layer1)
# Compile the model
model = models.Model(inputs=input_layer, outputs=output_layer2)
model.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return model
classifier = create_cnn()
accuracy = train_model(classifier, train_seq_x, train_y, valid_seq_x, is_neural_net=True)
print "CNN, Word Embeddings", accuracy
#輸出結(jié)果
Epoch 1/1
7500/7500 [==============================] - 12s 2ms/step - loss: 0.5847
CNN, Word Embeddings 0.5296
與前饋神經(jīng)網(wǎng)絡(luò)不同,前饋神經(jīng)網(wǎng)絡(luò)的激活輸出僅在一個方向上傳播,而循環(huán)神經(jīng)網(wǎng)絡(luò)的激活輸出在兩個方向傳播(從輸入到輸出,從輸出到輸入)。因此在神經(jīng)網(wǎng)絡(luò)架構(gòu)中產(chǎn)生循環(huán),充當(dāng)神經(jīng)元的“記憶狀態(tài)”,這種狀態(tài)使神經(jīng)元能夠記住迄今為止學(xué)到的東西。RNN中的記憶狀態(tài)優(yōu)于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),但是被稱為梯度彌散的問題也因這種架構(gòu)而產(chǎn)生。這個問題導(dǎo)致當(dāng)網(wǎng)絡(luò)有很多層的時候,很難學(xué)習(xí)和調(diào)整前面網(wǎng)絡(luò)層的參數(shù)。為了解決這個問題,開發(fā)了稱為LSTM(Long Short Term Memory)模型的新型RNN:
如果想了解更多關(guān)于LSTM,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/
def create_rnn_lstm():
# Add an Input Layer
input_layer = layers.Input((70, ))
# Add the word embedding Layer
embedding_layer = layers.Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
# Add the LSTM Layer
lstm_layer = layers.LSTM(100)(embedding_layer)
# Add the output Layers
output_layer1 = layers.Dense(50, activation="relu")(lstm_layer)
output_layer1 = layers.Dropout(0.25)(output_layer1)
output_layer2 = layers.Dense(1, activation="sigmoid")(output_layer1)
# Compile the model
model = models.Model(inputs=input_layer, outputs=output_layer2)
model.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return model
classifier = create_rnn_lstm()
accuracy = train_model(classifier, train_seq_x, train_y, valid_seq_x, is_neural_net=True)
print "RNN-LSTM, Word Embeddings", accuracy
#輸出結(jié)果
Epoch 1/1
7500/7500 [==============================] - 22s 3ms/step - loss: 0.6899
RNN-LSTM, Word Embeddings 0.5124
門控遞歸單元是另一種形式的遞歸神經(jīng)網(wǎng)絡(luò),我們在網(wǎng)絡(luò)中添加一個GRU層來代替LSTM。
defcreate_rnn_gru():
# Add an Input Layer
input_layer = layers.Input((70, ))
# Add the word embedding Layer
embedding_layer = layers.Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
# Add the GRU Layer
lstm_layer = layers.GRU(100)(embedding_layer)
# Add the output Layers
output_layer1 = layers.Dense(50, activation="relu")(lstm_layer)
output_layer1 = layers.Dropout(0.25)(output_layer1)
output_layer2 = layers.Dense(1, activation="sigmoid")(output_layer1)
# Compile the model
model = models.Model(inputs=input_layer, outputs=output_layer2)
model.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return model
classifier = create_rnn_gru()
accuracy = train_model(classifier, train_seq_x, train_y, valid_seq_x, is_neural_net=True)
print "RNN-GRU, Word Embeddings", accuracy
#輸出結(jié)果
Epoch 1/1
7500/7500 [==============================] - 19s 3ms/step - loss: 0.6898
RNN-GRU, Word Embeddings 0.5124
RNN層也可以被封裝在雙向?qū)又校覀儼袵RU層封裝在雙向RNN網(wǎng)絡(luò)中。
defcreate_bidirectional_rnn():
# Add an Input Layer
input_layer = layers.Input((70, ))
# Add the word embedding Layer
embedding_layer = layers.Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
# Add the LSTM Layer
lstm_layer = layers.Bidirectional(layers.GRU(100))(embedding_layer)
# Add the output Layers
output_layer1 = layers.Dense(50, activation="relu")(lstm_layer)
output_layer1 = layers.Dropout(0.25)(output_layer1)
output_layer2 = layers.Dense(1, activation="sigmoid")(output_layer1)
# Compile the model
model = models.Model(inputs=input_layer, outputs=output_layer2)
model.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return model
classifier = create_bidirectional_rnn()
accuracy = train_model(classifier, train_seq_x, train_y, valid_seq_x, is_neural_net=True)
print "RNN-Bidirectional, Word Embeddings", accuracy
#輸出結(jié)果
Epoch 1/1
7500/7500 [==============================] - 32s 4ms/step - loss: 0.6889
RNN-Bidirectional, Word Embeddings 0.5124
如果基本的架構(gòu)已經(jīng)嘗試過,則可以嘗試這些層的不同變體,如遞歸卷積神經(jīng)網(wǎng)絡(luò),還有其它變體,比如:
defcreate_rcnn():
# Add an Input Layer
input_layer = layers.Input((70, ))
# Add the word embedding Layer
embedding_layer = layers.Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
# Add the recurrent layer
rnn_layer = layers.Bidirectional(layers.GRU(50, return_sequences=True))(embedding_layer)
# Add the convolutional Layer
conv_layer = layers.Convolution1D(100, 3, activation="relu")(embedding_layer)
# Add the pooling Layer
pooling_layer = layers.GlobalMaxPool1D()(conv_layer)
# Add the output Layers
output_layer1 = layers.Dense(50, activation="relu")(pooling_layer)
output_layer1 = layers.Dropout(0.25)(output_layer1)
output_layer2 = layers.Dense(1, activation="sigmoid")(output_layer1)
# Compile the model
model = models.Model(inputs=input_layer, outputs=output_layer2)
model.compile(optimizer=optimizers.Adam(), loss='binary_crossentropy')
return model
classifier = create_rcnn()
accuracy = train_model(classifier, train_seq_x, train_y, valid_seq_x, is_neural_net=True)
print "CNN, Word Embeddings", accuracy
#輸出結(jié)果
Epoch 1/1
7500/7500 [==============================] - 11s 1ms/step - loss: 0.6902
CNN, Word Embeddings 0.5124
進(jìn)一步提高文本分類模型的性能
雖然上述框架可以應(yīng)用于多個文本分類問題,但是為了達(dá)到更高的準(zhǔn)確率,可以在總體框架中進(jìn)行一些改進(jìn)。例如,下面是一些改進(jìn)文本分類模型和該框架性能的技巧:
1. 清洗文本:文本清洗有助于減少文本數(shù)據(jù)中出現(xiàn)的噪聲,包括停用詞、標(biāo)點(diǎn)符號、后綴變化等。這篇文章有助于理解如何實(shí)現(xiàn)文本分類:
https://www.analyticsvidhya.com/blog/2014/11/text-data-cleaning-steps-python/
2. 組合文本特征向量的文本/NLP特征:特征工程階段,我們把生成的文本特征向量組合在一起,可能會提高文本分類器的準(zhǔn)確率。
模型中的超參數(shù)調(diào)優(yōu):參數(shù)調(diào)優(yōu)是很重要的一步,很多參數(shù)通過合適的調(diào)優(yōu)可以獲得最佳擬合模型,例如樹的深層、葉子節(jié)點(diǎn)數(shù)、網(wǎng)絡(luò)參數(shù)等。
3. 集成模型:堆疊不同的模型并混合它們的輸出有助于進(jìn)一步改進(jìn)結(jié)果。如果想了解更多關(guān)于模型集成,請?jiān)L問:
https://www.analyticsvidhya.com/blog/2015/08/introduction-ensemble-learning/
寫在最后
本文討論了如何準(zhǔn)備一個文本數(shù)據(jù)集,如清洗、創(chuàng)建訓(xùn)練集和驗(yàn)證集。使用不同種類的特征工程,比如計數(shù)向量、TF-IDF、詞嵌入、主題模型和基本的文本特征。然后訓(xùn)練了多種分類器,有樸素貝葉斯、Logistic回歸、SVM、MLP、LSTM和GRU。最后討論了提高文本分類器性能的多種方法。
、算法設(shè)計
Python 的數(shù)據(jù)結(jié)構(gòu),算法和設(shè)計模式的實(shí)現(xiàn)。另請參閱真棒算法。
演算法
algorithms 數(shù)據(jù)結(jié)構(gòu)和算法的最小示例。
https://github.com/keon/algorithms
python-ds 用于采訪采訪的數(shù)據(jù)結(jié)構(gòu)和算法的集合。
https://github.com/prabhupant/python-ds
sortedcontainers 排序集合的快速和純 Python 實(shí)現(xiàn)。
https://github.com/grantjenks/python-sortedcontainers
TheAlgorithms- 用 Python 實(shí)現(xiàn)的所有算法。
https://github.com/TheAlgorithms/Python
設(shè)計模式
PyPattyrn- 一個簡單但有效的庫,用于實(shí)現(xiàn)常見的設(shè)計模式。
https://github.com/tylerlaberge/PyPattyrn
python-patterns -Python 中設(shè)計模式的集合。
https://github.com/faif/python-patterns
transitions - 一種輕量級的,面向?qū)ο蟮挠邢逘顟B(tài)機(jī)實(shí)現(xiàn)。
https://github.com/pytransitions/transitions
二、聲音、視頻、圖像、文字處理
用于處理音頻及其元數(shù)據(jù)的庫。
聲音的
audioread- 跨庫(GStreamer + 核心音頻 + MAD + FFmpeg)音頻解碼。
https://github.com/beetbox/audioread
dejavu- 音頻指紋識別。
https://github.com/worldveil/dejavu
kapre - Keras 音頻預(yù)處理器
https://github.com/keunwoochoi/kapre
librosa- 用于音頻和音樂分析的 Python 庫
https://github.com/librosa/librosa
matchering - 一個用于自動參考音頻制作的庫。
https://github.com/sergree/matchering
mingus- 帶有 MIDI 文件和播放支持的高級音樂理論和樂譜包。
http://bspaans.github.io/python-mingus/
pyAudioAnalysis- 音頻特征提取,分類,分段和應(yīng)用。
https://github.com/tyiannak/pyAudioAnalysis
pydub- 使用簡單易用的高級界面處理音頻。
https://github.com/jiaaro/pydub
TimeSide- 開放的 Web 音頻處理框架。
https://github.com/Parisson/TimeSide
Metadata
beets- 音樂庫管理器和 MusicBrainz 標(biāo)記器。
https://github.com/beetbox/beets
eyeD3- 一種用于處理音頻文件的工具,特別是包含 ID3 元數(shù)據(jù)的 MP3 文件。
https://github.com/nicfit/eyeD3
mutagen- 處理音頻元數(shù)據(jù)的 Python 模塊。
https://github.com/quodlibet/mutagen
tinytag- 用于讀取 MP3,OGG,F(xiàn)LAC 和 Wave 文件的音樂元數(shù)據(jù)的庫。
https://github.com/devsnd/tinytag
用于處理視頻和 GIF 的庫。
moviepy- 用于基于腳本的電影編輯的模塊,具有多種格式,包括動畫 GIF。
https://zulko.github.io/moviepy/
scikit-video -SciPy 的視頻處理例程。
https://github.com/aizvorski/scikit-video
vidgear- 最強(qiáng)大的多線程視頻處理框架。
https://github.com/abhiTronix/vidgear
用于處理圖像的庫。
hmap- 圖像直方圖重新映射。
https://github.com/rossgoodwin/hmap
imgSeek- 使用視覺相似性搜索圖像集合的項(xiàng)目。
https://sourceforge.net/projects/imgseek/
nude.py- 裸露檢測。
https://github.com/hhatto/nude.py
pagan - 復(fù)古 identicon(阿凡達(dá))根據(jù)輸入的字符串和哈希生成。
https://github.com/daboth/pagan
pillow- 枕頭是友好的 PIL 叉。
https://github.com/python-pillow/Pillow
python- barcode - 在 Python 中創(chuàng)建條形碼,沒有任何額外的依賴關(guān)系。
https://github.com/WhyNotHugo/python-barcode
pygram- 類似 Instagram 的圖像過濾器。
https://github.com/ajkumar25/pygram
PyMatting -Alpha 遮罩的庫。
http://github.com/pymatting/pymatting
python-qrcode- 一個純 Python QR Code 生成器。
https://github.com/lincolnloop/python-qrcode
pywal- 一種從圖像生成配色方案的工具。
https://github.com/dylanaraps/pywal
pyvips- 具有低內(nèi)存需求的快速圖像處理庫。
https://github.com/libvips/pyvips
Quads - 基于四叉樹的計算機(jī)藝術(shù)。
https://github.com/fogleman/Quads
scikit-image- 用于(科學(xué))圖像處理的 Python 庫。
http://scikit-image.org/
thumbor- 智能影像服務(wù)。它可以按需裁剪,調(diào)整圖像大小和翻轉(zhuǎn)圖像。
https://github.com/thumbor/thumbor
wand - MagickWand 的 Python 綁定,ImageMagick 的 C API。
https://github.com/dahlia/wand
用于解析和處理純文本的庫。
一般的
chardet- 與 Python 2/3 兼容的字符編碼檢測器。
https://github.com/chardet/chardet
difflib-(Python 標(biāo)準(zhǔn)庫)用于計算增量的幫助程序。
https://docs.python.org/3/library/difflib.html
ftfy- 自動使 Unicode 文本更清晰,更一致。
https://github.com/LuminosoInsight/python-ftfy
Fuzzywuzzy- 模糊字符串匹配。
https://github.com/seatgeek/fuzzywuzzy
Levenshtein- 快速計算 Levenshtein 距離和字符串相似度。
https://github.com/ztane/python-Levenshtein/
pangu.py- 偏執(zhí)的文字間距。
https://github.com/vinta/pangu.py
pyfiglet- 用 Python 編寫的 figlet 的實(shí)現(xiàn)。
https://github.com/pwaller/pyfiglet
pypinyin- 將漢字(Hanzi)轉(zhuǎn)換為拼音(Pyyin)。
https://github.com/mozillazg/python-pinyin
textdistance- 使用 30 多種算法計算序列之間的距離。
https://github.com/orsinium/textdistance
unidecode -Unicode 文本的 ASCII 音譯。
https://pypi.org/project/Unidecode/
Slugify
awesome-slugify- 一個可以保留 unicode 的 Python slugify 庫。
https://github.com/dimka665/awesome-slugify
python-slugify- 一個 Python slugify 庫,它將 unicode 轉(zhuǎn)換為 ASCII。
https://github.com/un33k/python-slugify
unicode-slugify- 一種 Slugifier,它以 Django 為依賴項(xiàng)生成 unicode slug。
https://github.com/mozilla/unicode-slugify
唯一標(biāo)識符
hashids- 在 Python 中實(shí)現(xiàn) hashids。
https://github.com/davidaurelio/hashids-python
shortuuid- 簡潔,明確和 URL 安全的 UUID 的生成器庫。
https://github.com/skorokithakis/shortuuid
解析器
ply - 的 lex 和 yacc 解析工具的 Python 實(shí)現(xiàn)。
https://github.com/dabeaz/ply
pygments- 通用語法熒光筆。
http://pygments.org/
pyparsing- 生成解析器的通用框架。
https://github.com/pyparsing/pyparsing
python-nameparser - 將人名解析為它們的各個組成部分。
https://github.com/derek73/python-nameparser
python-phonenumbers- 解析,格式化,存儲和驗(yàn)證國際電話號碼。
https://github.com/daviddrysdale/python-phonenumbers
python-user-agents- 瀏覽器用戶代理解析器。
https://github.com/selwin/python-user-agents
sqlparse- 一個非驗(yàn)證的 SQL 解析器。
https://github.com/andialbrecht/sqlparse
三、日期和時間
用于處理日期和時間的庫。
Arrow- 一個 Python 庫,提供了一種明智且人性化的方法來創(chuàng)建,操作,格式化和轉(zhuǎn)換日期,時間和時間戳。
https://arrow.readthedocs.io/en/latest/
Chronyk- 一個 Python 3 庫,用于解析人類編寫的時間和日期。
https://github.com/KoffeinFlummi/Chronyk
dateutil- 標(biāo)準(zhǔn) Python datetime 模塊的擴(kuò)展。
https://github.com/dateutil/dateutil
delorean- 一個庫,用于清除與日期時間有關(guān)的不便的事實(shí)。
https://github.com/myusuf3/delorean/
maya- 人類的日期時間。
https://github.com/timofurrer/maya
moment - 一個 Python 庫用于處理日期 / 時間。受到 Moment.js 的啟發(fā)。
https://github.com/zachwill/moment
Pendulum-Python 日期時間變得容易。
https://github.com/sdispater/pendulum
PyTime- 一個易于使用的 Python 模塊,旨在按字符串操作日期 / 時間 / 日期時間。
https://github.com/shinux/PyTime
pytz- 世界時區(qū)定義,現(xiàn)代和歷史。將 tz 數(shù)據(jù)庫帶入 Python。
https://launchpad.net/pytz
when.py- 提供用戶友好的功能來幫助執(zhí)行常見的日期和時間操作。
https://github.com/dirn/When.py
四、爬蟲
自動執(zhí)行 Web 抓取。
cola- 分布式抓取框架。
https://github.com/chineking/cola
feedparser- 通用供稿解析器。
https://pythonhosted.org/feedparser/
grab - 網(wǎng)站抓取框架。
https://github.com/lorien/grab
MechanicalSoup- 用于自動與網(wǎng)站進(jìn)行交互的 Python 庫。
https://github.com/MechanicalSoup/MechanicalSoup
portia - Scrapy 的視覺抓取。
https://github.com/scrapinghub/portia
pyspider- 強(qiáng)大的蜘蛛系統(tǒng)。
https://github.com/binux/pyspider
robobrowser- 一個簡單的 Pythonic 庫,無需獨(dú)立的 Web 瀏覽器即可瀏覽 Web。
https://github.com/jmcarp/robobrowser
scrapy- 快速的高級屏幕抓取和網(wǎng)絡(luò)爬網(wǎng)框架。
https://scrapy.org/
用于提取 Web 內(nèi)容的庫。
html2text- 將 HTML 轉(zhuǎn)換為 Markdown 格式的文本。
https://github.com/Alir3z4/html2text
lassie- 人類的 Web 內(nèi)容檢索。
https://github.com/michaelhelmick/lassie
micawber- 一個小型庫,用于從 URL 中提取豐富的內(nèi)容。
https://github.com/coleifer/micawber
newspaper -Python 中的新聞提取,文章提取和內(nèi)容管理。
https://github.com/codelucas/newspaper
python- readability - arc90 的可讀性工具的快速 Python 端口。
https://github.com/buriy/python-readability
requests-html –適用于人類的 Pythonic HTML 解析。
https://github.com/psf/requests-html
sumy- 自動匯總文本文檔和 HTML 頁面的模塊。
https://github.com/miso-belica/sumy
textract- 從任何文檔,Word,PowerPoint,PDF 等中提取文本
https://github.com/deanmalmgren/textract
toapi- 每個網(wǎng)站都提供 API。
https://github.com/gaojiuli/toapi
五、HTML、XML
用于處理 HTML 和 XML 的庫。
BeautifulSoup- 提供 Pythonic 慣用法來迭代,搜索和修改 HTML 或 XML。
bleach –基于白名單 HTML 清理和文本 linkification 庫中的。
cssutils- 一個 Python 的 CSS 庫。
html5lib- 一個符合標(biāo)準(zhǔn)的庫,用于解析和序列化 HTML 文檔和片段。
lxml- 一個非常快速,易于使用的通用庫,用于處理 HTML 和 XML。
MarkupSafe- 為 Python 實(shí)現(xiàn) XML / HTML / XHTML 標(biāo)記安全字符串。
pyquery- 用于解析 HTML 的類似 jQuery 的庫。
untangle –將 XML 文檔轉(zhuǎn)換為 Python 對象,以方便訪問。
WeasyPrint- 用于 HTML 和 CSS 的可視渲染引擎,可以導(dǎo)出為 PDF。
xmldataset- 簡單的 XML 解析。
xmltodict- 使用 XML 就像使用 JSON。
六、HTTP 客戶端
使用 HTTP 的庫。
grequests- 異步 HTTP 請求的 request + gevent。
httplib2- 全面的 HTTP 客戶端庫。
httpx- 用于 Python 的下一代 HTTP 客戶端。
requests -HTTP 對人類的請求。
treq -Python 請求,例如在 Twisted 的 HTTP 客戶端之上構(gòu)建的 API。
七、office 模塊
用于解析和處理特定文本格式的庫。
General
tablib -XLS,CSV,JSON,YAML 中的表格數(shù)據(jù)集的模塊。
Office
docxtpl- 通過 jinja2 模板編輯 docx 文檔
openpyxl- 用于讀取和寫入 Excel 2010 xlsx /xlsm/xltx /xltm 文件的庫。
pyexcel- 提供一個用于讀取,操作和寫入 csv,ods,xls,xlsx 和 xlsm 文件的 API。
python-docx- 讀取,查詢和修改 Microsoft Word 2007/2008 docx 文件。
python-pptx- 用于創(chuàng)建和更新 PowerPoint(.pptx)文件的 Python 庫。
unoconv- 在 LibreOffice / OpenOffice 支持的任何文檔格式之間轉(zhuǎn)換。
XlsxWriter- 一個用于創(chuàng)建 Excel .xlsx 文件的 Python 模塊。
xlwings -BSD 許可的庫,可以輕松地從 Excel 調(diào)用 Python,反之亦然。
xlwt / xlrd- 從 Excel 文件寫入和讀取數(shù)據(jù)以及格式化信息。
PDF 格式
PDFMiner- 一種從 PDF 文檔提取信息的工具。
PyPDF2- 一個能夠拆分,合并和轉(zhuǎn)換 PDF 頁面的庫。
ReportLab- 允許快速創(chuàng)建豐富的 PDF 文檔。
Markdown
Mistune-Markdown 最快,功能最全的純 Python 解析器。
Python-Markdown -John Gruber 的 Markdown 的 Python 實(shí)現(xiàn)。
YAML
PyYAML- 適用于 Python 的 YAML 實(shí)現(xiàn)。
CSV
csvkit- 轉(zhuǎn)換為 CSV 并使用 CSV 的實(shí)用程序。
Archive
unp- 一個命令行工具,可以輕松地解壓縮檔案。
八、序列化
用于序列化復(fù)雜數(shù)據(jù)類型的庫
marshmallow- 一個輕量級的庫,用于將復(fù)雜的對象與簡單的 Python 數(shù)據(jù)類型相互轉(zhuǎn)換。
pysimdjson - 一個 Python 綁定 simdjson。
python-rapidjson- 一個 Python 包裝周圍 RapidJSON。
ultrajson- 使用 Python 綁定用 C 編寫的快速 JSON 解碼器和編碼器。
九、代碼分析、測試
碼質(zhì)量檢查器的工具。另請參閱令人敬畏的靜態(tài)分析。
代碼分析
Coala- 語言獨(dú)立且易于擴(kuò)展的代碼分析應(yīng)用程序。
code2flow- 將您的 Python 和 JavaScript 代碼轉(zhuǎn)換為 DOT 流程圖。
prospector- 分析 Python 代碼的工具。
pycallgraph- 一個可視化 Python 應(yīng)用程序流程(調(diào)用圖)的庫。
vulture- 查找和分析無效的 Python 代碼的工具。
Code Linters
flake8 - 一個包裝器 pycodestyle,pyflakes 和麥凱布。
很棒的片狀 8 擴(kuò)展
pylama- 用于 Python 和 JavaScript 的代碼審核工具。
pylint- 完全可定制的源代碼分析器。
wemake-python-styleguide- 有史以來最嚴(yán)格,最自以為是的 python linter。
代碼格式化程序
black –毫不妥協(xié)的 Python 代碼格式化程序。
isort- 用于對導(dǎo)入進(jìn)行排序的 Python 實(shí)用程序 / 庫。
yapf- 另一個來自 Google 的 Python 代碼格式化程序。
靜態(tài)類型檢查器,另請參見 awesome-python-typing
mypy- 在編譯期間檢查變量類型。
pyre-check- 性能類型檢查。
typeshed- 具有靜態(tài)類型的 Python 庫存根的集合。
靜態(tài)類型注釋生成器
MonkeyType- 一個用于 Python 的系統(tǒng),通過收集運(yùn)行時類型來生成靜態(tài)類型注釋。
pyannotate- 自動生成 PEP-484 注釋。
pytype -pytype 檢查并推斷 Python 代碼的類型 - 無需類型注釋。
滲透測試的框架和工具。
fsociety- 滲透測試框架。
setoolkit- 社會工程的工具包。
sqlmap- 自動 SQL 注入和數(shù)據(jù)庫接管工具。
用于測試代碼庫和生成測試數(shù)據(jù)的庫。
測試框架
hypothesis –假設(shè)是一個高級的 Quickcheck 樣式基于屬性的測試庫。
nose2 -nose 基于 `unittest2。的后繼者。
pytest- 一個成熟的功能齊全的 Python 測試工具。
Robot Framework 通用的測試自動化框架。
unittest-(Python 標(biāo)準(zhǔn)庫)單元測試框架。
測試選手
green - 干凈,多彩的測試運(yùn)行器。
mamba -Python 的權(quán)威測試工具。生于 BDD 的旗幟下。
tox- 自動構(gòu)建和測試多個 Python 版本的發(fā)行版
GUI / Web 測試
locust- 用 Python 編寫的可擴(kuò)展用戶負(fù)載測試工具。
PyAutoGUI -PyAutoGUI 是適用于人類的跨平臺 GUI 自動化 Python 模塊。
Schemathesis- 用于對基于 Open API / Swagger 規(guī)范構(gòu)建的 Web 應(yīng)用程序進(jìn)行基于屬性的自動測試的工具。
Selenium - Selenium WebDriver 的 Python 綁定。
sixpack- 與語言無關(guān)的 A / B 測試框架。
splinter- 用于測試 Web 應(yīng)用程序的開源工具。
Mock
doublex- 強(qiáng)大的 Python 測試框架加倍。
Frozengun- 通過模擬 datetime 模塊來穿越時間。
httmock- 一個針對 Python 2.6 + 和 3.2 + 的請求的模擬庫。
httpretty- 適用于 Python 的 HTTP 請求模擬工具。
mock-(Python 標(biāo)準(zhǔn)庫)一個模擬和修補(bǔ)庫。
mocket - 具有 gevent /asyncio/ SSL 支持的套接字模擬框架。
responses 一個實(shí)用程序庫,用于模擬請求 Python 庫。
VCR.py- 記錄并重放測試中的 HTTP 交互。
對象工廠
factory_boy -Python 的測試裝置替代品。
mixer- 另一種燈具更換。支持 Django,F(xiàn)lask,SQLAlchemy,Peewee 等
model_mommy- 創(chuàng)建隨機(jī)夾具以在 Django 中進(jìn)行測試。
代碼覆蓋率
coverage- 代碼覆蓋率度量。
偽數(shù)據(jù)
fake2db- 偽數(shù)據(jù)庫生成器。
faker- 一個生成偽造數(shù)據(jù)的 Python 包。
mimesis- 是一個 Python 庫,可幫助您生成虛假數(shù)據(jù)。
radar - 生成隨機(jī)的日期時間 / 時間。
用于驗(yàn)證數(shù)據(jù)的庫。
Cerberus- 一個輕量級和可擴(kuò)展的數(shù)據(jù)驗(yàn)證庫。
colander- 驗(yàn)證和反序列化通過 XML,JSON 和 HTML 表單發(fā)布獲得的數(shù)據(jù)。
jsonschema - Python 的 JSON 模式的實(shí)現(xiàn)。
schema- 用于驗(yàn)證 Python 數(shù)據(jù)結(jié)構(gòu)的庫。
Schematics –數(shù)據(jù)結(jié)構(gòu)驗(yàn)證。
valideer - 輕量級可擴(kuò)展數(shù)據(jù)驗(yàn)證和適配庫。
voluptuous - 的 - 一個 Python 數(shù)據(jù)驗(yàn)證庫。
十、web 框架
傳統(tǒng)的全棧 Web 框架。另請參閱 RESTful API。
同步
Django -Python 中最流行的 Web 框架。
很棒的 django
很棒的 django
Flask -Python 的微框架。
很棒的燒瓶
Pyramid- 一個小型,快速,扎實(shí)的開源 Python Web 框架。
真棒金字塔
Masonite- 以開發(fā)人員為中心的現(xiàn)代 Python Web 框架。
異步
Tornado- 一個 Web 框架和異步網(wǎng)絡(luò)庫。
十一、搜索
用于對數(shù)據(jù)建立索引并執(zhí)行搜索查詢的庫和軟件。
django-haystack- 模塊化搜索 Django。
elasticsearch-dsl-py -Elasticsearch 的官方高級 Python 客戶端。
elasticsearch-py - Elasticsearch 的官方低層 Python 客戶端。
pysolr - Apache Solr 的輕量級 Python 包裝器。
whoosh- 一個快速的純 Python 搜索引擎庫。
十二、日志記錄
用于生成和使用日志的庫。
logbook - - 記錄 Python 的替換記錄。
logging-(Python 標(biāo)準(zhǔn)庫)Python 的日志記錄工具。
loguru- 旨在以 Python 帶來令人愉悅的日志記錄的庫。
sentry- python - 適用于 Python 的 Sentry SDK。
structlog- 結(jié)構(gòu)化日志變得容易。
十三、并發(fā)與并行
用于并發(fā)和并行執(zhí)行的庫。另請參閱 awesome-asyncio。
parallel.futures-(Python 標(biāo)準(zhǔn)庫)用于異步執(zhí)行可調(diào)用對象的高級接口。
eventlet- 具有 WSGI 支持的異步框架。
gevent- 使用 greenlet 的基于協(xié)程的 Python 網(wǎng)絡(luò)庫。
multiprocessing-(Python 標(biāo)準(zhǔn)庫)基于進(jìn)程的并行性。
scoop -Python 中的可伸縮并發(fā)操作。
uvloop - 在.NET 之上的 asyncio 事件循環(huán)的超快速實(shí)現(xiàn) libuv。
十四、任務(wù)隊(duì)列
用于處理任務(wù)隊(duì)列的庫。
celery- 基于分布式消息傳遞的異步任務(wù)隊(duì)列 / 作業(yè)隊(duì)列。
Dramatiq- 用于 Python 3 的快速可靠的后臺任務(wù)處理庫。
huey- 小多線程任務(wù)隊(duì)列。
mrq- 使用 Redis 和 gevent 的 Python 中的分布式工作者任務(wù)隊(duì)列。
rq -Python 的簡單作業(yè)隊(duì)列。
十五、自然語言處理
用于使用人類語言的圖書館。
一般的
gensim- 人類主題建模。
langid.py- 獨(dú)立的語言識別系統(tǒng)。
nltk- 用于構(gòu)建 Python 程序以使用人類語言數(shù)據(jù)的領(lǐng)先平臺。
pattern- 一個 Web 挖掘模塊。
polyglot- 支持?jǐn)?shù)百種語言的自然語言管道。
pytext 的 - 基于 PyTorch 自然語言建模框架。
PyTorch-NLP- 一種工具包,可用于研究的快速深度學(xué)習(xí) NLP 原型。
spacy - 一種用于 Python 和用 Cython 工業(yè)強(qiáng)度的自然語言處理庫。
Stanza -Stanford NLP Group 的官方 Python 庫,支持 60 多種語言。
中國人
funNLP- 中國 NLP 的工具和數(shù)據(jù)集的集合。
jieba- 最受歡迎的中文文本分割庫。
pkuseg-python- 用于各種領(lǐng)域的中文分詞的工具包。
snownlp- 用于處理中文文本的庫。
十六、深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、計算機(jī)視覺
神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)框架。另請參閱真棒深度學(xué)習(xí)。
caffe- 深度學(xué)習(xí)的快速開放框架。
keras- 一個高級神經(jīng)網(wǎng)絡(luò)庫,能夠在 TensorFlow 或 Theano 之上運(yùn)行。
mxnet- 專為效率和靈活性而設(shè)計的深度學(xué)習(xí)框架。
pytorch- 具有強(qiáng)大 GPU 加速功能的 Python 中的張量和動態(tài)神經(jīng)網(wǎng)絡(luò)。
SerpentAI- 游戲代理框架。使用任何視頻游戲作為深度學(xué)習(xí)沙箱。
tensorflow- 由 Google 創(chuàng)建的最受歡迎的深度學(xué)習(xí)框架。
Theano- 一個用于快速數(shù)值計算的庫。
機(jī)器學(xué)習(xí)圖書館。另請參閱很棒的機(jī)器學(xué)習(xí)。
健身房 - 用于開發(fā)和比較強(qiáng)化學(xué)習(xí)算法的工具包。
H2O- 開源快速可擴(kuò)展機(jī)器學(xué)習(xí)平臺。
指標(biāo) - 機(jī)器學(xué)習(xí)評估指標(biāo)。
NuPIC -Numenta 智能計算平臺。
scikit-learn- 最受歡迎的機(jī)器學(xué)習(xí) Python 庫。
Spark ML - Apache Spark 的可擴(kuò)展機(jī)器學(xué)習(xí)庫。
vowpal_porpoise- 用于 Vowpal Wabbit 的輕量級 Python 包裝器。
xgboost- 一個可擴(kuò)展,可移植和分布式的梯度增強(qiáng)庫。
MindsDB -MindsDB 是現(xiàn)有數(shù)據(jù)庫的開源 AI 層,可讓您使用標(biāo)準(zhǔn)查詢輕松地開發(fā),訓(xùn)練和部署最新的機(jī)器學(xué)習(xí)模型。
計算機(jī)視覺圖書館。
EasyOCR- 支持 40 多種語言的即用型 OCR。
人臉識別 - 簡單的人臉識別庫。
Kornia - PyTorch 的開源可區(qū)分計算機(jī)視覺庫。
OpenCV- 開源計算機(jī)視覺庫。
pytesseract - Google Tesseract OCR 的包裝。
SimpleCV- 用于構(gòu)建計算機(jī)視覺應(yīng)用程序的開源框架。
tesserocr-tesseract-ocr 用于 OCR 的 API 的另一種簡單,對枕頭友好的包裝。
十七、數(shù)據(jù)分析、可視化
用于數(shù)據(jù)分析的庫。
AWS Data Wrangler -AWS 上的 Pandas。
Blaze -NumPy 和 Pandas 連接到大數(shù)據(jù)。
Pandas 界面中的 Open Mining- 商業(yè)智能(BI)。
Optimus –敏捷數(shù)據(jù)科學(xué)的工作流程變得容易與 PySpark。
Orange –通過可視化編程或腳本進(jìn)行數(shù)據(jù)挖掘,數(shù)據(jù)可視化,分析和機(jī)器學(xué)習(xí)。
Pandas- 一個提供高性能,易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具的庫。
用于可視化數(shù)據(jù)的庫。另請參閱 awesome-javascript。
Altair- 用于 Python 的聲明性統(tǒng)計可視化庫。
Bokeh- 用于 Python 的交互式 Web 繪圖。
bqplot -Jupyter Notebook 的交互式繪圖庫
Cartopy- 具有 matplotlib 支持的制圖 python 庫
短跑 - 建立在燒瓶頂部,反應(yīng),Plotly 旨在分析 Web 應(yīng)用程序。
很棒的破折號
圖表 - 圖表為代碼。
Matplotlib- 一個 Python 2D 繪圖庫。
plotnine- 基于 ggplot2 的 Python 圖形語法。
Pygal- 一個 Python SVG 圖表創(chuàng)建器。
PyGraphviz - Graphviz 的 Python 接口。
PyQtGraph- 交互式和實(shí)時 2D / 3D / 圖像繪制以及科學(xué) / 工程小部件。
Seaborn - 使用 Matplotlib 統(tǒng)計數(shù)據(jù)可視化。
VisPy- 基于 OpenGL 的高性能科學(xué)可視化。
十八、數(shù)據(jù)庫驅(qū)動程序
用于連接和操作數(shù)據(jù)庫的庫。
MySQL- 很棒的 MySQL
mysqlclient- 支持 Python 3 的 MySQL 連接器(mysql-python fork)。
PyMySQL- 與 mysql-python 兼容的純 Python MySQL 驅(qū)動程序。
PostgreSQL- 很棒的 Postgres
psycopg2- 最受歡迎的 Python PostgreSQL 適配器。
查詢 -psycopg2 庫的包裝,用于與 PostgreSQL 交互。
SQlite- 很棒的 SQLite
sqlite3-(Python 標(biāo)準(zhǔn)庫)與 DB-API 2.0 兼容的 SQlite 接口
SuperSQLite- 建立在 apsw 之上的增壓 SQLite 庫。
其他關(guān)系數(shù)據(jù)庫
pymssql -Microsoft SQL Server 的簡單數(shù)據(jù)庫接口。
clickhouse-driver- 具有 ClickHouse 本地接口的 Python 驅(qū)動程序。
NoSQL 數(shù)據(jù)庫
cassandra-driver -Apache Cassandra 的 Python 驅(qū)動程序。
happybase -Apache HBase 的開發(fā)人員友好型庫。
kafka-python -Apache Kafka 的 Python 客戶端。
py2neo- 用于 Neo4j 的客戶端庫和工具包。
pymongo -MongoDB 的官方 Python 客戶端。
redis-py -Redis 的 Python 客戶端。
異步客戶端
motor -MongoDB 的異步 Python 驅(qū)動程序。
十九、DevOps 工具
DevOps 的軟件和庫。
配置管理
ansible- 一個非常簡單的 IT 自動化平臺。
cloudinit- 一個多分發(fā)包,用于處理云實(shí)例的早期初始化。
OpenStack- 用于構(gòu)建私有和公共云的開源軟件。
pyinfra- 通用的 CLI 工具和 python 庫,可自動執(zhí)行基礎(chǔ)架構(gòu)。
saltstack- 基礎(chǔ)結(jié)構(gòu)自動化和管理系統(tǒng)。
SSH 樣式的部署
cuisine - 類似于 Fabric 的廚師功能。
fabric - 一個簡單的,Python 化工具,用于遠(yuǎn)程執(zhí)行和部署。
fabtools- 編寫很棒的 Fabric 文件的工具。
流程管理
honcho - Foreman 的 Python 克隆,用于管理基于 Procfile 的應(yīng)用程序。
supervisor - 用于 UNIX 監(jiān)事過程控制系統(tǒng)。
監(jiān)控方式
psutil- 跨平臺的流程和系統(tǒng)實(shí)用程序模塊。
后備
BorgBackup- 具有壓縮和加密功能的重復(fù)數(shù)據(jù)刪除存檔器。
其他
docker- compose- 使用 Docker 的快速隔離開發(fā)環(huán)境。
二十、分布式計算
分布式計算的框架和庫。
批量處理
dask- 用于分析計算的靈活并行計算庫。
luigi- 一個模塊,可幫助您構(gòu)建批處理作業(yè)的復(fù)雜管道。
mrjob- 在 Hadoop 或 Amazon Web Services 上運(yùn)行 MapReduce 作業(yè)。
PySpark - Apache Spark Python API。
Ray- 用于并行和分布式 Python 的系統(tǒng),統(tǒng)一了機(jī)器學(xué)習(xí)生態(tài)系統(tǒng)。
流處理
faust- 流處理庫,將想法從 Kafka Streams 移植到 Python。
streamparse- 通過 Apache Storm 針對實(shí)時數(shù)據(jù)流運(yùn)行 Python 代碼。
二十一、配置、打包構(gòu)建
用于存儲和解析配置選項(xiàng)的庫。
configobj- 帶有驗(yàn)證的 INI 文件解析器。
configparser-(Python 標(biāo)準(zhǔn)庫)INI 文件解析器。
hydra -Hydra 是用于優(yōu)雅配置復(fù)雜應(yīng)用程序的框架。
profig- 使用值轉(zhuǎn)換從多種格式進(jìn)行配置。
python-decouple- 嚴(yán)格將設(shè)置與代碼分開。
用于創(chuàng)建打包的可執(zhí)行文件以進(jìn)行發(fā)行的庫。
dh-virtualenv- 以 Debian 軟件包的形式構(gòu)建和分發(fā) virtualenv。
Nuitka - 將腳本,模塊,程序包編譯為可執(zhí)行文件或擴(kuò)展模塊。
py2app- 凍結(jié) Python 腳本(Mac OS X)。
py2exe- 凍結(jié) Python 腳本(Windows)。
pyarmor- 一種用于混淆 python 腳本,將混淆后的腳本綁定到固定計算機(jī)或使混淆后的腳本失效的工具。
PyInstaller- 將 Python 程序轉(zhuǎn)換為獨(dú)立的可執(zhí)行文件(跨平臺)。
pynsist- 用于構(gòu)建 Windows 安裝程序的工具,安裝程序?qū)?Python 本身捆綁在一起。
shiv- 命令行實(shí)用程序,用于構(gòu)建完全獨(dú)立的 zipapp(PEP 441),但包括其所有依賴項(xiàng)。
二十二、虛擬環(huán)境
用于 Python 版本和虛擬環(huán)境管理的庫。
pyenv- 簡單的 Python 版本管理。
virtualenv- 創(chuàng)建隔離的 Python 環(huán)境的工具。
二十三、界面開發(fā)
用于處理圖形用戶界面應(yīng)用程序的庫。
curses - - 內(nèi)置包裝器 ncurses 的用于創(chuàng)建終端 GUI 的應(yīng)用程序。
Eel- 一個用于制作簡單的類似于電子的脫機(jī) HTML / JS GUI 應(yīng)用程序的庫。
enaml- 使用聲明性語法(如 QML)創(chuàng)建漂亮的用戶界面。
Flexx -Flexx 是用于創(chuàng)建 GUI 的純 Python 工具包,它使用 Web 技術(shù)進(jìn)行呈現(xiàn)。
Gooey - 使用命令行將命令行程序轉(zhuǎn)換為完整的 GUI 應(yīng)用程序。
kivy- 用于創(chuàng)建 NUI 應(yīng)用程序的庫,可在 Windows,Linux,Mac OS X,Android 和 iOS 上運(yùn)行。
pyglet -Python 的跨平臺窗口和多媒體庫。
PyGObject -GLib / GObject / GIO / GTK +(GTK + 3)的 Python 綁定。
PyQt - Qt 跨平臺應(yīng)用程序和 UI 框架的 Python 綁定。
PySimpleGUI - tkinter,Qt,WxPython 和 Remi 的包裝。
pywebview- 圍繞 webview 組件的輕量級跨平臺本機(jī)包裝器。
Tkinter -Tkinter 是 Python 的事實(shí)上的標(biāo)準(zhǔn) GUI 軟件包。
Toga -Python 本機(jī),OS 本機(jī) GUI 工具箱。
urwid- 一個用于創(chuàng)建終端 GUI 應(yīng)用程序的庫,該庫對小部件,事件,豐富的顏色等具有強(qiáng)大的支持。
wxPython -wxWidgets C ++ 類庫與 Python 的混合。
DearPyGui- 一個簡單的 GPU 加速的 Python GUI 框架
二十四、游戲開發(fā)
很棒的游戲開發(fā)庫。
Arcade -Arcade 是一個現(xiàn)代 Python 框架,用于制作具有引人注目的圖形和聲音的游戲。
Cocos2d -cocos2d 是用于構(gòu)建 2D 游戲,演示和其他圖形 / 交互應(yīng)用程序的框架。
Harfang3D- 用于 3D,VR 和游戲開發(fā)的 Python 框架。
Panda3D- 迪士尼開發(fā)的 3D 游戲引擎。
Pygame -Pygame 是一組旨在編寫游戲的 Python 模塊。
PyOgre -Ogre 3D 渲染引擎的 Python 綁定,可用于游戲,模擬或任何 3D。
PyOpenGL -OpenGL 及其相關(guān) API 的 Python ctypes 綁定。
PySDL2 -SDL2 庫的基于 ctypes 的包裝器。
RenPy- 一個視覺小說引擎
二十五、任務(wù)調(diào)度器
用于計劃作業(yè)的庫。
Airflow 氣流是一個以編程方式編寫,安排和監(jiān)視工作流的平臺。
APScheduler- 輕巧但功能強(qiáng)大的進(jìn)程內(nèi)任務(wù)計劃程序,可讓您計劃功能。
django-schedule -Django 的日歷應(yīng)用程序。
doit- 一個任務(wù)運(yùn)行器和構(gòu)建工具。
gunnery - 具有基于 Web 界面的分布式系統(tǒng)的多用途任務(wù)執(zhí)行工具。
Joblib- 一套在 Python 中提供輕量級流水線的工具。
Plan - 像用吊飾一樣用 Python 編寫 crontab 文件。
Prefect- 一個現(xiàn)代的工作流程編排框架,可輕松構(gòu)建,調(diào)度和監(jiān)視強(qiáng)大的數(shù)據(jù)管道。
schedule- 針對人類的 Python 作業(yè)調(diào)度。
Spiff- 用純 Python 實(shí)現(xiàn)的功能強(qiáng)大的工作流引擎。
TaskFlow- 一個 Python 庫,可幫助簡化,一致且可靠的任務(wù)執(zhí)行
二十六、科學(xué)計算
用于科學(xué)計算的圖書館。另請參見 Python for-Scientists。
astropy- 天文學(xué)的社區(qū) Python 庫。
bcbio-nextgen- 提供最佳實(shí)踐流水線,用于全自動高通量測序分析。
bccb- 收集與生物學(xué)分析有關(guān)的有用代碼。
Biopython -Biopython 是一套免費(fèi)的生物計算工具。
cclib- 一個用于解析和解釋計算化學(xué)程序包結(jié)果的庫。
Colour - 實(shí)施大量的顏色理論轉(zhuǎn)換和算法。
Karate Club - 用于圖形結(jié)構(gòu)化數(shù)據(jù)的無監(jiān)督機(jī)器學(xué)習(xí)工具箱。
NetworkX- 用于復(fù)雜網(wǎng)絡(luò)的高生產(chǎn)率軟件。
NIPY- 神經(jīng)影像工具箱的集合。
NumPy- 使用 Python 進(jìn)行科學(xué)計算的基本軟件包。
ObsPy- 地震學(xué)的 Python 工具箱。
Open Babel- 一種化學(xué)工具箱,旨在講多種化學(xué)數(shù)據(jù)語言。
PyDy -Python Dynamics 的縮寫,用于協(xié)助工作流進(jìn)行動態(tài)運(yùn)動建模。
PyMC- 馬爾可夫鏈蒙特卡洛采樣工具包。
QuTiP -Python 中的 Quantum Toolbox。
RDKit- 化學(xué)信息學(xué)和機(jī)器學(xué)習(xí)軟件。
SciPy- 用于數(shù)學(xué),科學(xué)和工程的基于 Python 的開源軟件生態(tài)系統(tǒng)。
SimPy- 一個基于過程的離散事件模擬框架。
statsmodels -Python 中的統(tǒng)計建模和計量經(jīng)濟(jì)學(xué)。
SymPy- 一個用于符號數(shù)學(xué)的 Python 庫。
Zipline- 一個 Pythonic 算法交易庫。
RPC
RPC 兼容服務(wù)器。
RPyC(遠(yuǎn)程 Python 調(diào)用)- 用于 Python 的透明且對稱的 RPC 庫
zeroRPC -zerorpc 是基于 ZeroMQ 和 MessagePack 的靈活 RPC 實(shí)現(xiàn)。
ython 提供了多種庫來處理純文本數(shù)據(jù),這些庫可以應(yīng)對從基本文本操作到復(fù)雜文本分析的各種需求。以下是一些常用的純文本處理相關(guān)的庫:
# 分割字符串
text = "hello, world"
print(text.split(",")) # 輸出:['hello', ' world']
# 連接字符串
words = ["Python", "is", "awesome"]
print(" ".join(words)) # 輸出:Python is awesome
# 替換字符串中的子字符串
text = "Hello World"
print(text.replace("World", "Python")) # 輸出:Hello Python
import re
text = "The rain in Spain"
x = re.search("^The.*Spain$", text)
if x:
print("YES! We have a match!")
else:
print("No match")
import string
# 示例:使用 string 常量
print(string.ascii_lowercase) # 輸出:abcdefghijklmnopqrstuvwxyz
import textwrap
sample_text = '''
This is a very very very very very long string.
'''
print(textwrap.fill(sample_text, width=50))
import difflib
text1 = "Python is great"
text2 = "Python is good"
d = difflib.Differ()
diff = d.compare(text1.split(), text2.split())
print('\n'.join(diff))
import codecs
# 讀取一個 UTF-8 編碼的文件
with codecs.open('example.txt', 'r', 'utf-8') as f:
print(f.read())
import unicodedata
# 獲取字符的名稱
char = '?'
name = unicodedata.name(char)
print(name) # 輸出:LATIN SMALL LETTER N WITH TILDE
import csv
with open('example.csv', mode='r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
import json
data = {'key': 'value'}
json_data = json.dumps(data)
print(json_data)
import xml.etree.ElementTree as ET
# 解析XML
tree = ET.parse('example.xml')
root = tree.getroot()
# 遍歷XML文檔
for child in root:
print(child.tag, child.attrib)
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Start tag:", tag)
def handle_endtag(self, tag):
print("End tag:", tag)
def handle_data(self, data):
print("Data:", data)
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
text = "Hello Mr. Smith, how are you doing today?"
tokens = word_tokenize(text)
print(tokens)
通過使用這些庫,Python 程序員能夠執(zhí)行各種文本處理任務(wù),從簡單的字符串操作到復(fù)雜的文本分析和處理。根據(jù)項(xiàng)目的具體需求,正確選擇合適的庫對于提高效率和代碼質(zhì)量至關(guān)重要。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。