文字雲:HanLP 關鍵字 + d3-cloud 視覺化


關鍵字篩選

做好世界地圖連結相關的句子後,下一步想做的功能是文字雲。一樣是點選什麼國家就出現關於該國家的文字雲。在篩選文字雲裡面的字時,我試了三種篩選方式,不過都是用 HanLP 裡面的 function 來做:

  1. HanLP.segment():直接斷字來做詞頻統計,但這樣雜訊蠻多的,想到可能還得找停用詞的詞典去做判斷,覺得有點麻煩。
  2. HanLP.extractKeyword():直接去找每個句子的關鍵字,然後做詞頻的統計。結果比直接斷字漂亮不少,但這樣的概念是,例如點選「日本」時,出現愈多次的詞只代表它很常跟「日本」一起出現,並不能代表它跟「日本」是有意義上的關係的。
  3. HanLP.parseDependency():用這個去找與國家有直接句法關係的詞,但嘗試過幾次就會發現,有些也該納入詞頻統計的詞會抓不到,因此我先把有直接關係的詞存進 list A,接著再把跟 list A 有句法關係的詞存進 list B。這邊觀察到的是:不是每個間接跟國家有句法關係的詞都是有意義的,我只要其中與 list A 的詞有定中關係、動賓關係、狀中結構、主謂關係、動補結構的詞存進 list B,然後再篩掉只有一個字的詞以及重複的部分,計算詞頻。

依照我的目的而言,3 的做法似乎比較適合。用這樣的方式做出詞與詞頻的 dictionary 後,下一步就要來看怎麼弄出文字雲了。


文字雲

在網路上稍微找了一下文字雲的相關套件,發現知名度比較高的好像是 d3-cloud,於是決定就用它來做我的文字雲,這邊有 demo 可以先看看效果。

先把 d3.layout.cloud.js 載下來,然後放進我的 /js 目錄底下。然後做點簡單的測試,我把這個筆記的 code 貼下來跑跑看,有成功跑出一樣的結果,應該沒什麼問題。感覺應該蠻容易的,只要把 data 裡面的資料替換掉即可,輕輕鬆鬆。


最後小結

成功做出文字雲後,再進一步用文字雲裡的字當關鍵字,二次篩選下面的斷句結果,就這樣預計做到的四個功能已經完成三個了,原本預計要做:

  1. 從 D3.js 的世界地圖中點選國家,出現包含該國家名、國家城市名的句子。(因資料內容屬摘要性質,大多一句話就能敘述完一件事。)→5/31完成
  2. 從 D3.js 的世界地圖中點選國家,出現由與該國家名有句法關係的詞組成的文字雲。→6/6完成
  3. 從文字雲點選關鍵字,出現同時包含該國家名以及關鍵字的斷句。→6/8完成
  4. D3.js 的地圖用廠商對於該國市場的樂觀程度上色,例如廠商都想往A國發展,A國就塗上紅色之類的。

在做好1-3的功能後,昨天先將目前成果向主管報告,然後主管表示沒有達到預期的效益,因此這個專案被腰斬了^口^......原本預計先做好這四個功能之後,再來處理版面美觀的部分,所以目前有點醜醜的,不過既然被腰斬了那也沒辦法,總之目前成果大概長這樣吧(為了保護資料大部分就用灰方塊蓋住):

好,接下來要開始下一個專案了。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.