文本分析與可視化

文本分析与可视化

文本分析与可视化

在這篇文章中,我想描述一種文本分析和可視化技術,它使用一種基本的關鍵字提取機制,只使用單詞計數器從我在http://ericbrown.com [1]博客上創建的文章語料庫中查找前3個關鍵詞。為了創建這個語料庫,我下載了我所有的博客文章(大約1400篇),並抓取了每篇文章的文本。然後,我使用 nltk 和各種 詞幹提取/詞形還原 技術對文章進行令牌化(也可翻譯為:標記解析),計算關鍵詞並選取前3個關鍵詞。然後我將所有文章中的關鍵詞聚合起來,使用Gephi[2]工具來創建一個可視化圖像。

我已經上傳了一個帶有完整代碼集的jupyter筆記本[3],供你重現此工作。你還可以從這裡[4]的csv文件中獲得我的博客文章的副本。你需要安裝 beautifulsoup 和 nltk。你可以使用以下代碼安裝他們:

文本分析与可视化

首先,我們加載我們的庫:

文本分析与可视化

我在這裡加載時出現警告,是因為有一個關於 BeautifulSoup 的警告,我們可以忽略它。

現在,讓我們來設置一些工作所需要的東西。

首先,我們來設置停止詞、詞幹提取器和詞形還原器。

文本分析与可视化

現在,我們來建立一些我們需要的函數。

tokenizer 函數是從這裡[5]引用的。如果你想看一些很酷的主題建模,那就跳過並閱讀如何在Python中挖掘新聞反饋數據和提取交互式見解……[6]這是一篇非常好的關於主題建模和集群的文章,我在本文及以後的文章中也會提到這一點。

文本分析与可视化

接下來,我的文章中有一些html標記,所以我想在對它做任何其他事情之前先將它從我的文本中刪除……這裡有一個使用 bs4 的類可以實現,我在Stackoverflow[7]上找到了這段代碼。

文本分析与可视化

好了,現在來看看有趣的東西。要獲得關鍵詞,我們只需要兩行代碼。這個函數執行計數併為我們返回關鍵字的數量。

文本分析与可视化

最後,我創建了一個函數來獲取一個包含 url /pubdate/author/text的pandas dataframe(數據結構集),然後從中創建關鍵詞。這個函數遍歷一個pandas dataframe(每行是一篇來自我博客的文章),標記“text”來源並返回一個pandas dataframe,其中包含關鍵詞、文章標題和文章的發佈數據。

文本分析与可视化

現在是時候加載數據並開始分析了。這段代碼載入我的博客文章(可以在這裡[8]找到),然後從數據中只獲取感興趣的列,重命名它們併為標記化做準備。在讀入csv文件時,大多數操作都可以使用一行代碼完成,但是我已經為另一個項目編寫了這些操作,並且它就是這樣。

文本分析与可视化

使用dataframe的 tail 方法我們可以得到:

文本分析与可视化

現在,我們可以通過調用 build_article_df 函數來標記和單詞計數工作了。

文本分析与可视化

這將為我們提供一個新的dataframe,其中包含每篇文章的前3個關鍵詞(以及文章的發佈日期和標題)。

文本分析与可视化

這本身就很酷。我們使用一個簡單的計數器為每篇文章自動生成關鍵詞。不是很複雜,但是很好用。還有很多其他的方法,但是現在我們還是用這個。除了擁有關鍵詞之外,看一看這些關鍵詞之間以及它們和其他關鍵詞之間是如何“連接”起來的,可能會很有趣。例如,“data”在其他文章中出現了多少次?

有多種方法可以回答這個問題,但是一種方法是通過可視化以一個 拓撲/網絡 映射來查看關鍵詞之間的連接。我們需要對關鍵詞進行“計數”,然後構建一個共生矩陣,我們可以將這個矩陣導入到 Gephi 中來進行可視化。我們可以使用 networkx 庫來繪製網絡映射,但是需要做很多工作,否則就很難從中得到有用的東西,相比之下,還是使用 Gephi 對用戶更友好。

我們有了關鍵詞,需要一個共生矩陣。要做到這一點,我們需要進行一些操作,讓我們的關鍵詞分開來。

文本分析与可视化

現在我們有了一個關鍵詞dataframe kw_df ,它包含兩列:關鍵詞和帶有關鍵詞的關鍵詞組

文本分析与可视化

這並沒有什麼實質意義,但是我們需要兩列來構建一個共生矩陣。我們通過迭代每個文檔關鍵詞列表( keywords 列)並查看是否包含 關鍵詞 。如果包含,我們就把它加入到共生矩陣中,然後構建出我們的共生矩陣。

文本分析与可视化

現在,我們在 co_occur dataframe中有一個共生矩陣,可以將其導入到 Gephi 中來查看節點和邊緣的映射。將 co_occur dataframe保存為一個CSV文件,以便在 Gephi 中使用(你可以在這裡[9]下載該矩陣的副本)。

文本分析与可视化

First, import your co-occuance matrix csv file using File -> Import Spreadsheet and just leave everything at the default. Then, in the ‘overview’ tab, you should see a bunch of nodes and connections like the image below.

走進Gephi

現在,是時候使用Gephi了。對於這個工具,我是新手,所以就不能像教程那樣給你提供很多東西,但是我可以告訴你構建網絡映射所需要的步驟。首先,使用 File -> Import Spreadsheet 導入共生矩陣csv文件,並將所有內容保留為默認值。然後,在“overview”選項卡中,你應該會看到一連串的節點和連接,如下圖所示;

文本分析与可视化

ericbrown.com文章副本的網絡映射圖

接著,向下移動到“layout”部分,選擇Fruchterman Reingold layout,並按下“run”按鈕來重新繪製映射圖。在某些情況下,當節點在屏幕上穩定下來後,你需要按下“stop”。你會看到如下所示的內容。

文本分析与可视化

ericbrown.com文章副本的網絡映射圖

很酷,對吧?現在,讓我們給這個圖像加入顏色。在“appearance”部分,選擇“nodes”,然後選擇“ranking”,接著選擇“Degree”並點擊“apply”。你會看到網絡圖發生了變化,現在它有了一些與之相關的顏色。如果你願意,你可以隨意改變顏色,但是默認的配色方案應該是這樣的:

文本分析与可视化

不過這還不是太有趣。文本/關鍵詞在哪裡呢? 你需要切換到“overview”選項卡才能看到。你應該會看到如下所示的內容(在下拉列表中選擇“Default Curved”之後)。

文本分析与可视化

這下子就很酷了。你會在這裡看到兩個非常不同的很有趣的領域。“Data”和“Canon”……這是有道理的,因為我寫了很多關於數據的東西,分享了很多我的攝影作品(用Canon相機拍的)。

如果你感興趣的話,這是我所有1400篇文章的完整映射圖。同樣,有兩個圍繞著攝影和數據的主要集群,但還有一個圍繞著‘business’, ‘people’ 和 ‘cio’的大型集群,這與我多年來的大部分寫作內容相吻合。

還有許多其他方法可以可視化文本分析。我打算再發幾篇文章來談談我最近使用和遇到的一些更有趣的方法。請繼續關注。

如果你想了解更多關於文本分析的知識,請閱讀以下書籍:

使用Python進行文本分析:從數據中獲得有用結論的實戰方法[10]

Python的自然語言處理:使用自然語言工具包分析文本[11]

R語言文本挖掘[12]

相關鏈接:

[1]——http://ericbrown.com./

[2]——https://gephi.org/

[3]——https://github.com/urgedata/pythondata/blob/master/Text%20Analytics/ericbrown.ipynb

[4]——https://github.com/urgedata/pythondata/blob/master/examples/tocsv.csv

[5]——http://ahmedbesbes.com/how-to-mine-newsfeed-data-and-extract-interactive-insights-in-python.html

[6]——http://ahmedbesbes.com/how-to-mine-newsfeed-data-and-extract-interactive-insights-in-python.html

[7]——https://stackoverflow.com/questions/753052/strip-html-from-strings-in-python

[8]——https://github.com/urgedata/pythondata/blob/master/examples/tocsv.csv

[9]——https://github.com/urgedata/pythondata/blob/master/Text%20Analytics/out/ericbrown_co-occurancy_matrix.csv

[10]——http://amzn.to/2wTELtb

[11]——http://amzn.to/2y7B9E6

[12]——http://amzn.to/2g6zmaU

英文原文:https://pythondata.com/text-analytics-visualization/
譯者:天天向上


分享到:


相關文章: