整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          在Python中實(shí)現(xiàn)文本分類(附代碼、數(shù)據(jù)集)

          文本分類是商業(yè)問題中常見的自然語言處理任務(wù),目標(biāo)是自動將文本文件分到一個或多個已定義好的類別中。文本分類的一些例子如下:

          • 分析社交媒體中的大眾情感
          • 鑒別垃圾郵件和非垃圾郵件
          • 自動標(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)入所有所需的庫。如果你沒有安裝這些庫,可以通過以下官方鏈接來安裝它們。

          • Pandas:https://pandas.pydata.org/pandas-docs/stable/install.html
          • Scikit-learn:http://scikit-learn.org/stable/install.html
          • XGBoost:http://xgboost.readthedocs.io/en/latest/build.html
          • TextBlob:http://textblob.readthedocs.io/en/dev/install.html
          • Keras:https://keras.io/#installation

          #導(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ù)集中選出重要的特征,有以下幾種方式:

          • 計數(shù)向量作為特征
          • TF-IDF向量作為特征
          • 單個詞語級別
          • 多個詞語級別(N-Gram)
          • 詞性級別
          • 詞嵌入作為特征
          • 基于文本/NLP的特征
          • 主題模型作為特征

          接下來分別看看它們?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:矩陣代表了每個詞語在不同文檔中的TF-IDF分?jǐn)?shù)。
          • N-gram級別TF-IDF:N-grams是多個詞語在一起的組合,這個矩陣代表了N-grams的TF-IDF分?jǐn)?shù)。
          • 詞性級別TF-IDF:矩陣代表了語料中多個詞性的TF-IDF分?jǐn)?shù)。

          #詞語級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)建許多額外基于文本的特征有時可以提升模型效果。比如下面的例子:

          • 文檔的詞語計數(shù)—文檔中詞語的總數(shù)量
          • 文檔的詞性計數(shù)—文檔中詞性的總數(shù)量
          • 文檔的平均字密度--文件中使用的單詞的平均長度
          • 完整文章中的標(biāo)點(diǎn)符號出現(xiàn)次數(shù)--文檔中標(biāo)點(diǎn)符號的總數(shù)量
          • 整篇文章中的大寫次數(shù)—文檔中大寫單詞的數(shù)量
          • 完整文章中標(biāo)題出現(xiàn)的次數(shù)—文檔中適當(dāng)?shù)闹黝}(標(biāo)題)的總數(shù)量
          • 詞性標(biāo)注的頻率分布
          • 名詞數(shù)量
          • 動詞數(shù)量
          • 形容詞數(shù)量
          • 副詞數(shù)量
          • 代詞數(shù)量

          這些特征有很強(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í)中有很多模型可供選擇。我們將使用下面不同的分類器來做文本分類:

          • 樸素貝葉斯分類器
          • 線性分類器
          • 支持向量機(jī)(SVM)
          • Bagging Models
          • Boosting Models
          • 淺層神經(jīng)網(wǎng)絡(luò)
          • 深層神經(jīng)網(wǎng)絡(luò)
          • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
          • LSTM
          • GRU
          • 雙向RNN
          • 循環(huán)卷積神經(jīng)網(wǎng)絡(luò)(RCNN)
          • 其它深層神經(jīng)網(wǎng)絡(luò)的變種

          接下來我們詳細(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ò)

          卷積神經(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

          • 循環(huán)神經(jīng)網(wǎng)絡(luò)-LSTM

          與前饋神經(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

          • 循環(huán)神經(jīng)網(wǎng)絡(luò)-GRU

          門控遞歸單元是另一種形式的遞歸神經(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

          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

          • 循環(huán)卷積神經(jīng)網(wǎng)絡(luò)

          如果基本的架構(gòu)已經(jīng)嘗試過,則可以嘗試這些層的不同變體,如遞歸卷積神經(jīng)網(wǎng)絡(luò),還有其它變體,比如:

          • 層次化注意力網(wǎng)絡(luò)(Sequence to Sequence Models with Attention)
          • 具有注意力機(jī)制的seq2seq(Sequence to Sequence Models with Attention)
          • 雙向循環(huán)卷積神經(jīng)網(wǎng)絡(luò)
          • 更多網(wǎng)絡(luò)層數(shù)的CNNs和RNNs

          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)的庫:

          1. str 類型: Python 內(nèi)建的字符串類型提供了許多簡便的方法來進(jìn)行基礎(chǔ)文本處理,如分割、連接、替換文本等。
          # 分割字符串
          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
          
          1. re: Python 的標(biāo)準(zhǔn)庫之一,用于執(zhí)行正則表達(dá)式操作。這個庫對于復(fù)雜的字符串匹配和提取非常有用。
          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")
          
          1. string: 這個標(biāo)準(zhǔn)庫模塊包含了一些常見的字符串操作函數(shù)和常量。
          import string
          
          # 示例:使用 string 常量
          print(string.ascii_lowercase)  # 輸出:abcdefghijklmnopqrstuvwxyz
          
          1. textwrap: 用于格式化文本段落以適應(yīng)屏幕寬度的工具。
          import textwrap
          sample_text = '''
           This is a very very very very very long string.
           '''
          print(textwrap.fill(sample_text, width=50))
          
          1. difflib: 可以用來比較序列之間的差異,包括文本文件。
          import difflib
          
          text1 = "Python is great"
          text2 = "Python is good"
          d = difflib.Differ()
          diff = d.compare(text1.split(), text2.split())
          print('\n'.join(diff))
          
          1. codecs: 用于編碼和解碼文本文件,特別是涉及不同編碼的場景。
          import codecs
          
          # 讀取一個 UTF-8 編碼的文件
          with codecs.open('example.txt', 'r', 'utf-8') as f:
                print(f.read())
          
          1. unicodedata: 用于處理Unicode字符的數(shù)據(jù)庫。
          import unicodedata
          
          # 獲取字符的名稱
          char = '?'
          name = unicodedata.name(char)
          print(name)  # 輸出:LATIN SMALL LETTER N WITH TILDE
          
          1. csv: 用于讀寫CSV格式文件的庫,雖然CSV不是純文本,但是通常被視為簡單文本數(shù)據(jù)的一種。
          import csv
          
          with open('example.csv', mode='r') as file:
                reader = csv.reader(file)
                for row in reader:
                   print(row)
          
          1. json: 用于讀寫JSON格式的數(shù)據(jù),雖然JSON通常用于數(shù)據(jù)交換,但也是文本格式的一種。
          import json
          
          data = {'key': 'value'}
          json_data = json.dumps(data)
          print(json_data)
          
          1. xml.etree.ElementTree: 用于解析和創(chuàng)建XML數(shù)據(jù)。
          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)
          
          1. html.parser: 用于解析HTML文檔。
          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>')
          
          1. nltk (Natural Language Toolkit): 一個強(qiáng)大的文本處理庫,用于處理人類使用的自然語言數(shù)據(jù)。
          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)重要。


          主站蜘蛛池模板: 中文字幕一区二区三区免费视频| 日本精品无码一区二区三区久久久 | 久久久久国产一区二区三区| 亚洲日韩一区精品射精| 国产成人综合精品一区| 成人免费一区二区无码视频| 久久久国产精品亚洲一区| 亚洲线精品一区二区三区影音先锋| 亚洲AⅤ无码一区二区三区在线| 日本香蕉一区二区三区| 天天视频一区二区三区 | 插我一区二区在线观看| 一区二区不卡久久精品| 四虎永久在线精品免费一区二区 | 国产一区二区三区高清视频| 亚洲Aⅴ无码一区二区二三区软件| 美女视频免费看一区二区| 在线观看一区二区三区视频| 成人免费视频一区| 国产精品久久亚洲一区二区| 国产成人高清亚洲一区91| 国产福利一区二区| 亚洲国产av一区二区三区| 国产AV国片精品一区二区| 国产乱码精品一区二区三区中文| 国产乱码精品一区二区三区中文| 日本不卡一区二区三区| 老熟妇仑乱视频一区二区 | 亚洲熟妇成人精品一区| 精品久久综合一区二区| 一区二区三区免费视频网站| 欧洲精品无码一区二区三区在线播放| 精品一区二区无码AV| 国产亚洲一区二区三区在线观看| 亚洲国产一区二区a毛片| AV鲁丝一区鲁丝二区鲁丝三区 | 天堂国产一区二区三区| 亚洲熟女乱色一区二区三区| 精品免费AV一区二区三区| 风间由美性色一区二区三区| 在线成人一区二区|