Skip to content

KeidaiHidaka/RecommendYoutubeChannel

Repository files navigation

RecommendYoutubehannel

タイトル

おすすめYouTubeチャンネル 紹介君

19FI095 日髙継大

1. はじめに

この授業で扱った情報アクセスと知的処理に関する手法を活用したマッシュアップを考えたところ、 授業で利用したsudachiの形態素解析を使ってなにかを作りたいと思った。

私にとって役立つプログラムを作りたかったため、私がよく利用する、YouTubeと形態素解析を関連付けた。

プログラムの大まかな流れとしては、コンソールにYouTubeチャンネルのURLを入力(複数可)し、Enterを押すと、デフォルトのブラウザが開き、おすすめのYouTubeチャンネルが表示されるといったものだ。

2. 情報アクセス技術/知的処理技術の動向

今回作成したプログラムに関連する技術の動向について述べる。

今回、sudachiを利用した形態素解析を行った。Sudachiの近年の動向としては、
2020年10月9日より、国内最大規模の日本語言語処理資源「SudachiDict」および「chiVe」をOpen Data on AWSで公開開始 されたそうだ。

3. システムの設計と実装

3.1 実現した機能

コンソールに入力した任意のYouTubeチャンネルのURLから、おすすめYouTubeチャンネルが表示されるシステム

任意のYouTubeチャンネルのURLをコンソールに入力後、Enterを2回押すと起動する。数秒後に各デバイスのデフォルトのブラウザでおすすめチャンネルが表示される。

YouTubeチャンネルのURL以外をコンソールに入力すると、エラーを吐く

3.2 システムが利用するリソース

名称:YouTube
概要:YouTubeチャンネル
利用目的:htmlからYouTubeチャンネルのチャンネルIDとチャンネル名を取得
URL例:https://www.youtube.com/channel/UCKnPsmCuIyXioKofQa217JQ
形式:HTML

名称:YouTubeチャンネルの最新動画情報
概要:YouTubeチャンネルの最新の動画15本の情報
利用目的:YouTubeチャンネルの最新動画のタイトルを取得
URL例:https://www.youtube.com/feeds/videos.xml?channel_id=UCKnPsmCuIyXioKofQa217JQ
形式:Atom

名称:GoogleNews
概要:世の中のニュース
利用目的:該当YouTubeチャンネルのGoogleNewsを取得
URL:https://news.google.com/topstories?hl=ja&gl=JP&ceid=JP:ja
形式:HTML

3.3 プログラムの構成

まずこのプログラムは

  • Main.java
  • GetYouTubeChannelId.java
  • FeedYouTubeChannel.java
  • GetYouTubeChannelName.java
  • GetGoogleNewsTitle.java
  • Sudachi.java
  • FreqWordsCount.java
  • SearchRecommendedYouTubeChannel.java

の8つのプログラムからなる。

YouTubeチャンネルリンク>チャンネルID & チャンネル名>Feedから最新動画15件のタイトル & GoogelNewsででてきたNewsタイトル > 形態素解析で登場頻度の高い名詞TOP3を選択>名詞からYouTubeチャンネルをブラウザ起動して検索

というのが大まかな流れだ。

  • Main.javaを実行して、コンソールに任意のYouTubeチャンネルのURL(複数可)を入力し実行。文字列配列にURLが入る

  • GetYouTubeChannelId.javaにURLの配列を渡す。各URLにアクセスし、HTMLからチャンネルIDを取得する

  • 同様にGetYouTubeChannelName.javaにURLの配列を渡す。各URLにアクセスし、HTMLからチャンネル名を取得する

  • GetGoogleNewsTitle.javaにチャンネル名を渡し、出てきたニュースのタイトルを取得する


  • FeedYouTubeChannel.javaにチャンネルIDの配列を渡す。各Feedにアクセスし、最新動画15件のタイトルを取得する

  • Sudachi.javaに動画タイトルとニュースタイトルの配列を渡す。形態素解析をし、名詞のみ取得

  • FreqWordsCount.javaに名詞の配列を渡す。頻度の高い単語TOP3を取得

  • SearchRecommendedYouTubeChannel.javaに頻度の高い単語TOP3の配列を渡す。デバイスのデフォルトのブラウザを起動。頻度の高い単語を検索欄に入れた状態でYouTubeチャンネル検索をブラウザで開く

    3.4 データ構造とアルゴリズム

    FreqWordsCount.javaにて動画タイトルに使われたすべての名詞が格納された文字配列を、HashMapを利用して、頻度の高い順に並び替え、上位3名詞を配列に格納した。

    3.5 その他の工夫点

    YouTubeチャンネルのURLは主に、
    https://www.youtube.com/channel/チャンネルID
    https://www.youtube.com/user/ユーザー名
    https://www.youtube.com/c/チャンネル名?

    の3種類からなっている。
    1種類目だけであればチャンネルIDは一目瞭然なのだが、残りの二種類はチャンネルIDがわからない。
    調べてもチャンネルIDを取得できるツールがなかったため、HTMLから自力で探した。
    (苦労した)

    4. 実験

    4.1 実験条件

    プログラムの入力について説明すること。 データを入力とする場合には、データの件数、データの時間範囲など、 データの持つ性質に即した説明をすること。 ライブラリや外部ツールの version についても記載すること。

    Main.javaを実行後、コンソールの指示通りに、任意のYouTubeチャンネルのURLを入力しEnterを2回押す。
    URLは基本的に何行でも入力可能。

    sudachiのバージョンは0.5.2
    

    4.2 実験結果

    入力URL:
    https://www.youtube.com/user/HikakinTV
    https://www.youtube.com/c/junchannel
    https://www.youtube.com/c/koyakky-ch

    結果画像:準備中

    5. 考察

    5.1 機能

    改良点としては 動画タイトルの頻出名詞、GoogleNewsタイトル以外からも、おすすめYouTubeチャンネルを検索する要素を取り出すべきだった

    5.2 実現方法

    大量の名詞が格納された配列から、頻度の高い順に並べるアルゴリズムは ハッシュマップを利用して効率よくできた

    リソースは最大限有効に活用できた。

    5.3 その他

    今回YouTube(最新動画タイトル)とGoogleNewsのマッシュアップをしたわけだが、もっと効率的にチャンネルの特徴を表す要素を引き出す方法を考えたかった

    6. おわりに

    今後の展開として、YouTube以外にもTwitterなどのSNSからおすすめYouTubeチャンネルを探す機能などもつけてみたい

    感想

    そこそこ実用的なプログラムが書けたのが嬉しい。
    3.5 その他の工夫点で記述したが、 YouTubeチャンネルのURLが3種類(もっとあるかも)あるせいで、 チャンネルIDをHTMLから自力で探すはめになった

    もとから1種類であってくれ、、、、、(AtomのためにチャンネルIDが必要だった上、チャンネルIDの取得が意外と大変だった)

    参考文献


    国内最大規模の日本語言語処理資源「SudachiDict」および「chiVe」をOpen Data on AWSで公開開始 ー自然言語処理技術で日本語の曖昧さを吸収し、さらに便利でオープンなシステムへー 株式会社ワークスアプリケーションズ2020年10月9日 13時20分
    https://prtimes.jp/main/html/rd/p/000000178.000011485.html

    情報アクセスと知的処理ー形態素解析ーSudachi
    https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sudachi.html

  • About

    No description, website, or topics provided.

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages