ユーザ用ツール

サイト用ツール


korean:mecab:python_tfidf

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
korean:mecab:python_tfidf [2021/11/06 23:33] – [RSSフィードからのリンク取得および記事の処理] yoshikorean:mecab:python_tfidf [2021/12/13 23:32] (現在) – [やること] yoshi
行 24: 行 24:
 韓国の新聞社サイトで公開されているRSSフィードを使って,リストにある記事を取得し,名詞類(普通名詞,固有名詞,語根)のTF-IDFを計算します.その上で,リスト中の記事から10本をランダムに選び,TF-IDF上位10語を列挙します. 韓国の新聞社サイトで公開されているRSSフィードを使って,リストにある記事を取得し,名詞類(普通名詞,固有名詞,語根)のTF-IDFを計算します.その上で,リスト中の記事から10本をランダムに選び,TF-IDF上位10語を列挙します.
  
-ここでは例として,경향신문(京郷新聞)の[[https://www.khan.co.kr/help/help_rss.html|RSSサービス]]から,「政治」カテゴリのフィードを利用します.大手の新聞社でRSSサービスを行っているのは以下のとおりです:+ここでは例として,경향신문(京郷新聞)の[[https://www.khan.co.kr/help/help_rss.html|RSSサービス]]から,「정치(政治」カテゴリのフィードを利用します.大手の新聞社でRSSサービスを行っているのは以下のりです:
  
-  * [[https://rssplus.chosun.com/|조선일보(朝鮮日報)]]:更新されていない +  * [[https://rssplus.chosun.com/|조선일보(朝鮮日報)]]:記事の構造分からない 
-  * [[https://rss.joins.com/|중앙일보(中央日報)]]+  * [[https://rss.joins.com/|중앙일보(中央日報)]]:カテゴリによっては更新されていない・リンクが切れている
   * [[http://rss.donga.com/|동아일보(東亜日報)]]:記事の構造が分からない   * [[http://rss.donga.com/|동아일보(東亜日報)]]:記事の構造が分からない
   * [[https://www.hani.co.kr/arti/RSS/|한겨레(ハンギョレ)]]   * [[https://www.hani.co.kr/arti/RSS/|한겨레(ハンギョレ)]]
 +  * [[http://www.nocutnews.co.kr/rss/|노컷뉴스(ノーカットニュース/CBS)]]
 +  * [[http://rss.kmib.co.kr/|국민일보(国民日報)]]
 +  * [[https://www.segye.com/rssInfo|세계일보(世界日報)]]
 +  * [[http://rss.hankooki.com/|한국아이닷컴(hankooki.com)]]
 +  * [[https://www.mk.co.kr/rss/|매일경제(毎日経済)]]
  
 付記した理由から,ここでは경향신문を取り上げることにします.他のRSSを利用する場合,適宜読み替えてください. 付記した理由から,ここでは경향신문を取り上げることにします.他のRSSを利用する場合,適宜読み替えてください.
行 42: 行 47:
 from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.feature_extraction.text import TfidfVectorizer
 import pandas as pd import pandas as pd
-from k2jamo import substitute_main+import k2jamo
 </code> </code>
  
行 69: 行 74:
     soup = BeautifulSoup(html.content, 'html.parser')     soup = BeautifulSoup(html.content, 'html.parser')
     # 경향신문向け     # 경향신문向け
-    articles = soup.find_all('p', class_ = 'content_text')+    articles = soup.select('p.content_text')
     # 중앙일보向け     # 중앙일보向け
     # articles = soup.select('#article_body > p')     # articles = soup.select('#article_body > p')
行 79: 行 84:
 なお,記事本文が格納されている要素はサイトによって異なります.ここまで分かっている中では,중앙일보(中央日報)の場合,「경향신문向け」としてある次の行をコメントアウトして,''articles = soup.select('#article_body > p')''の方を使用すると,記事本文が取り出せます.他はまだ調査中です. なお,記事本文が格納されている要素はサイトによって異なります.ここまで分かっている中では,중앙일보(中央日報)の場合,「경향신문向け」としてある次の行をコメントアウトして,''articles = soup.select('#article_body > p')''の方を使用すると,記事本文が取り出せます.他はまだ調査中です.
  
-> [2021/11/06 追加] 한겨레(ハンギョレ)''articles = soup.find_all('div', class_ = 'article-text')''で取得できました.+> [2021/11/06 追加] いくつか調べた結果,書き換えの内容は以下の通りです. 
 +
 +한겨레(ハンギョレ) ''articles = soup.select('div.article-text')'' 
 +> 노컷뉴스(ノーカットニュース・CBS) ''articles = soup.select('div', id = 'pnlContent')''
  
 ===== MeCabによる解析 ===== ===== MeCabによる解析 =====
行 126: 行 134:
 for i in range(len(rss_list)): for i in range(len(rss_list)):
     print("processing:", i+1, "/", len(rss_list))     print("processing:", i+1, "/", len(rss_list))
-    text = substitute_main(news_scraping(rss_list[i].link.text))+    text = k2jamo.substitute(news_scraping(rss_list[i].link.text))
     text = extract(text)     text = extract(text)
     titles.append(rss_list[i].title.text)     titles.append(rss_list[i].title.text)
行 157: 行 165:
 </code> </code>
  
-結果は以下の通り.+実行結果は以下の通り.フィードの項目(item)数が10以下だとエラーになります.''random.sample()''で取り出す数を変更してください
  
 <code bash> <code bash>
 > python handic_mecab.py > python handic_mecab.py
 +processing: 1 / 54
 Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER. Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
 ...中略... ...中略...
 +processing: 54 / 54
 Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER. Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
       안철수 출마와 김동연, 제3지대 가능성은       안철수 출마와 김동연, 제3지대 가능성은
行 276: 行 286:
 </code> </code>
  
-文字コード関連のエラーが出ますが,だいたいうまくいっているようです.中央日報の方の記事を使う場合,このエラーは出ませんでした.+文字コード関連のエラーが出ますが,だいたいうまくいっているようです.경향신문以外の記事を使う場合,このエラーは出ませんでした.
  
 大統領選挙(대선)が近づいて,各党の候補者選び(경선)が熱を帯びていることもあり,それぞれの記事で取り扱われている候補者(후보)の名前(윤, 홍, 유, 안, 김, ...)などが上位にきていることが分かります. 大統領選挙(대선)が近づいて,各党の候補者選び(경선)が熱を帯びていることもあり,それぞれの記事で取り扱われている候補者(후보)の名前(윤, 홍, 유, 안, 김, ...)などが上位にきていることが分かります.
行 282: 行 292:
 ===== 終わりに ===== ===== 終わりに =====
  
-[[korean:mecab:r_howto|RとRMeCabで扱う]],別途Perlなどで字母に分解したりする必要がありましたが,データの取得から文字列の処理,形態素解析,計算まで一つの言語で完結するのは便利です. +[[korean:mecab:r_howto|RとRMeCabで扱う]]場合,別途Perlなどで字母に分解したりする必要がありましたが,データの取得から文字列の処理,形態素解析,計算まで一つの言語で完結するのは便利です.
- +
-RSSフィートの項目数が多いと時間がかかりますが,処理中の内容,残り項目数を表示するなど,あるといいかもしれません+
  
 {{indexmenu_n>205}} {{indexmenu_n>205}}
korean/mecab/python_tfidf.1636209207.txt.gz · 最終更新: 2021/11/06 23:33 by yoshi