1. 快捷導航

            在Jupyter Notebook中將分詞結果轉換成數組或矩陣

            2021-11-26 11:49| 發布者: Fuller| 查看: 4184| 評論: 0

            摘要: 1,本Notebook背景介紹如果將集搜客分詞和情感分析軟件生成的結果文件交給sklearn都機器學習庫做進一步計算,那么通常需要轉換成numpy數組,也可能需要轉換成numpy矩陣。而從numpy數組到numpy矩陣,只需要調用numpy ...

            1,本Notebook背景介紹

            如果將集搜客分詞和情感分析軟件生成的結果文件交給sklearn都機器學習庫做進一步計算,那么通常需要轉換成numpy數組,也可能需要轉換成numpy矩陣。而從numpy數組到numpy矩陣,只需要調用numpy一個函數就行了。那么,關鍵是從分詞工具生成的excel文件到numpy數組的轉換。這個轉換用Pandas橋接一下,都是很簡單的過程??傊?,路線是:excel轉換成Pandas dataframe,然后在轉換成numpy數組。

            下面以選詞結果表為例,展示轉換成數組和矩陣需要用到的函數。這是一種最簡單的情形,轉換過程中沒有任何對excel單元格進行處理的過程。

            如果處理其他的表和其他目的,可能會難度大一些,比如處理分詞效果表:分詞效果表中的每一行文字做了切詞,詞與詞之間用空格間隔。如果想在矩陣中,每個詞作為一列,每一行填0或者1,表示是否在這一行句子中出現了這個詞,那么就需要用python程序先把對應每個詞建立每一列。這個過程將在后續的notebook中講解。

            本notebook的python代碼主要執行了下面的步驟:

            1. 加載選詞結果表

            2. 將結果轉換成數組

            3. 將結果轉換成矩陣

            2,引入需要用到的庫

            import os

            import time

            import numpy as np

            import pandas as pd

            3,輸出和常量配置

            pd.set_option('display.width', 1000)  # 設置字符顯示寬度

            pd.set_option('display.max_rows', None)  # 設置顯示最大

            # np.set_printoptions(threshold=np.inf) # threshold 指定超過多少使用省略號,np.inf代表無限大

            ?

            # 存原始數據的目錄

            raw_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\raw')

            # 存處理后的數據的目錄

            processed_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\processed')

            filename_temp = pd.Series(['詞頻','分詞效果','選詞矩陣','選詞匹配','選詞結果','共詞矩陣'])

            file_word_freq = ''

            file_seg_effect = ''

            file_word_choice_matrix = ''

            file_word_choice_match = ''

            file_word_choice_result = ''

            file_co_word_matrix = ''

            4,檢測data\raw目錄下是否有選詞結果表

            在我們發布的一系列Jupyter Notebook中,凡是處理GooSeeker分詞軟件導出的結果文件的,都給各種導出文件起了固定的名字。為了方便大家使用,只要把導出文件放在data/raw文件夾,notebook就會找到導出文件,賦值給對應的文件名變量。下面羅列了可能用到的文件名變量:

            file_word_freq:詞頻表

            file_seg_effect: 分詞效果表

            file_word_choice_matrix: 選詞矩陣表

            file_word_choice_match: 選詞匹配表

            file_word_choice_result: 選詞結果表

            file_co_word_matrix: 共詞矩陣表

            【注意】本notebook只使用選詞結果表,下面的代碼將檢查data/raw中有沒有選詞結果表,如果沒有會報錯,后面的程序就沒法執行了。

            # 0:'詞頻', 1:'分詞效果', 2:'選詞矩陣', 3:'選詞匹配', 4:'選詞結果', 5:'共詞矩陣'

            print(raw_data_dir + '\r\n')

            ?

            for item_filename in os.listdir(raw_data_dir):

                if filename_temp[4] in item_filename:

                    file_word_choice_result = item_filename

                    continue

            if file_word_choice_result:

                print("選詞結果excel表:", "data\\raw\\", file_word_choice_result)

            else:

                print("選詞結果excel表:不存在")

            輸出結果顯示:

            C:\Users\work\workspace_219\notebook\Jupyter Notebook將分詞結果轉換成數組或矩陣\notebook\eda\..\..\data\raw

            選詞結果excel表: data\raw\ 選詞結果_202109291141532740.xlsx


            5,讀取選詞結果表

            df_word_choice_result = pd.read_excel(os.path.join(raw_data_dir, file_word_choice_result))


            6,查看excel表前10行數據

            df_word_choice_result.head(10)


            輸出結果顯示:

            標簽詞 詞頻 詞性

            0 下崗 2805 動詞

            1 沒有 1712 動詞

            2 企業 1320 名詞

            3 時候 1233 名詞

            4 工人 1094 名詞

            5 國家 1092 名詞

            6 工作 985 動詞

            7 問題 710 名詞

            8 知道 670 動詞

            9 可以 660 動詞


            7,將結果轉換成數組

            7.1,df.values

            array_word_choice_result = df_word_choice_result.values

            display(array_word_choice_result)

            輸出結果顯示:

            array([['下崗', 2805, '動詞'],

                   ['沒有', 1712, '動詞'],

                   ['企業', 1320, '名詞'],

                   ...,

                   ['重工業', 41, '名詞'],

                   ['民企', 30, '其他'],

                   ['民營企業', 27, '名詞']], dtype=object)


            7.2,np.array(df)

            np_array_word_choice_result = np.array(df_word_choice_result)

            np_array_word_choice_result

            輸出結果顯示:

            array([['下崗', 2805, '動詞'],

                   ['沒有', 1712, '動詞'],

                   ['企業', 1320, '名詞'],

                   ...,

                   ['重工業', 41, '名詞'],

                   ['民企', 30, '其他'],

                   ['民營企業', 27, '名詞']], dtype=object)


            8,將結果轉換為矩陣

            8.1,numpy matrix()和numpy mat/asmatrix

            區別:如果輸入已經是矩陣或ndarray,則asmatrix不會復制。等效于matrix(data, copy=False)。詳細參看:numpy.asmatrix — NumPy v1.21 Manual

            np_matrix_word_choice_result = np.matrix(df_word_choice_result)

            np_matrix_word_choice_result

            輸出結果顯示:

            matrix([['下崗', 2805, '動詞'],

                    ['沒有', 1712, '動詞'],

                    ['企業', 1320, '名詞'],

                    ...,

                    ['重工業', 41, '名詞'],

                    ['民企', 30, '其他'],

                    ['民營企業', 27, '名詞']], dtype=object)


            np_matrix_word_choice_result = np.mat(df_word_choice_result)

            np_matrix_word_choice_result

            輸出結果顯示:

            matrix([['下崗', 2805, '動詞'],

                    ['沒有', 1712, '動詞'],

                    ['企業', 1320, '名詞'],

                    ...,

                    ['重工業', 41, '名詞'],

                    ['民企', 30, '其他'],

                    ['民營企業', 27, '名詞']], dtype=object)

            9,下載本Notebook

            Jupyter Notebook將分詞結果轉換成數組或矩陣.zip

            3

            鮮花

            握手

            雷人

            路過

            雞蛋

            剛表態過的朋友 (3 人)

            最新評論

            GMT+8, 2022-11-26 23:23

            欧美一级午夜福利免费区