API使って自然言語処理して内部リンク自動生成してみた。API使って自然言語処理して内部リンク自動生成してみた。API使って自然言語処理して内部リンク自動生成してみた。Languageは、Googleの機械学習を使った自然言語処理API。MeCabのようないわゆる形態素解析ではなく、Entity分析やSentence分析など、ある程度Google側で解析した結果を返却してくれるのが特徴。文章を送ると有料になりますが、大規模サービスで無ければ基本的には無料の範囲で使うことが可能。デモを使ってどんな結果が出るか確かめる。内部リンクを自動生成する。機械学習を使って、非構造化テキストから分析情報を得ることができます。モデルといったものが挙げられています。(他のことにも使えると思います。)今回は、さっくり使用方法についての解説と、これを使って、Wikipediaへのリンクを自動的に生成する仕組みを作ってみたいと思います。デモを使ってどんな結果が出るか確かめる。どんな結果を返してくれるのか、公式サイトのデモを使ってみましょう。上記のように、文章を入力して「Analyze」をクリック。すると下に色々結果が出てきました。APIを実際にコンソール上で実行する際には、これらのどの結果を出すかこちらで指定しますが、デモの時は全部出してくれます。具体的には以下のような項目になります。Entities(エンティティ分析)Sentiment(感情分析)Syntax(構文解析)Categories以下で細かく解説していきます。Entities(エンティティ分析)恐らく一番MeCab等のイメージに近い分析をしてくれます。文章を分析して、Entity、つまり自立した名詞を取ってきてくれます。「その名詞が固有名詞であるか、一般名詞であるか」「文章の中でどのくらい重要な単語(キーワード)であるか」「名詞の種類(地名であるか、人名であるか等)」といったものを表示してくれています。ここで今回の記事で大事なのが、一部の単語については、Wikipediaへのリンクを表示してくれるということです。上記のようになっています。この文章の場合、「蒼井そら」さんへのリンクは張らない方がいいですが、Twitterについては内部リンクが張ってあれば、Twitterって何だろう?と思った人がWikipediaを見て調べることが出来ます。今回はそれをやっていきたいと思っているので、このEntities分析を使っていくことになります。Sentiment(感情分析)この分析では、感情がポジティブかネガティブかのスコアを付けてくれます。Amazonレビューや、お客様アンケートの結果などの全体的なポジティブ・ネガティブの分析をする場合などに使えそう。数値の見方は簡単で、Scoreがプラスならポジティブ、マイナスならネガティブと考えればOKです。このサイトがもっと人気になってコメントとかつくようになったり、アプリのレビューとかが付くようになったら使ってみて記事にしたいと思います。(いつになるのか・・・)Syntax(構文解析)これは係り受け(どの言葉がどの言葉にかかってるか、修飾してるかという分析のこと)の解析とかをやってくれてます。専門的なところで、活用するにも知識がいる分野だと思うので割愛しますが、より正確な構文解析をするのであれば、係り受けは重要な分野です。これも確かOpenNLPとかで機械学習で良い感じにできたので、わざわざ自分で実装する必要はないのかなと思います。使うとしたら、ここで係り受け解析したものをOpenNLPに食わせるとかでしょうか、ちょっとパッとは浮かびませんでした。Categories?ここは自分がクリックしたときは使えませんでした。日本語非対応?早速APIを使っていく。APIの利用をするにはクレジットカードの申し込みとか色々必要です。無料トライアル期間を使えば、終了してから勝手にクレジットカードからお金を請求されることはないので、そちらを活用してから切り替えるか考えましょう。申し込みをすると、勝手にGCPのダッシュボードまで遷移してくれるので、そこで、「APIの有効化」を探してクリックし、「APIの有効化」をクリック。language」と入れると以下の様にAPIが出てくるのでクリックして有効にしましょう。その後、認証情報を作成する必要があるので、手順に従って作成し、JsonファイルをDLしましょう。したら、こちらのクイックスタートに従って進めていきます。諸々の手続きはそちらが詳しいので、詰まりポイントだけ。GOOGLE_APPLICATION_CREDENTIALSの設定これ、ターミナルでやってる分にはクイックスタートの方法で問題ないのですが、eclipseとかでやるときは一工夫入れないとだめです。自分はeclipseの実行の構成の編集とか久々にやったので詰まりました・・・。言うと、上の手順で作ったcredientialもプロジェクト内に入れないとだめなのですが、これって何処に入れるのが正しいのでしょうか?課金が発生するので、あんまりセキュリティ考えずに置くと怒られるポイントだと思いますが・・・。無料トライアルなので気にせず、src/main/配下にconfigディレクトリを切り、その下にDLしたjsonファイルを配置しました。このまま実行すると、以下のようなエラーが出てきます。information.なんか色々言ってますが、とにかくデフォルトの認証は使えないぞ、GOOGLE_APPLICATION_CREDENTIALSにちゃんと認証情報のパス指定しろということを言ってます。」に、値を認証情報の入ったjsonファイルの配置箇所にしてあげましょう。これで実行すれば、以下のような結果が出てきます。0.3Hello,Worldの重要性は各単語同じだそうです。内部リンクを自動生成する。本番、wikilinkの自動生成を行います。実際に利用する文章は、試しに以下のような文章とします。「松岡修三がバンクーバーに行ってしまったので、日本は今太陽神が不在で気温が非常に下がってしまっています。」バンクーバー、日本、上手くいけば松岡修造や太陽神あたりがWikipediaリンクを張れそうです。実際にやってみた結果が以下の様になります。※リンク付き松岡修三がバンクーバーに行ってしまったので、日本は今太陽神が不在で気温が非常に下がってしまっています。href=”https://en.wikipedia.org/wiki/Solar_deity”>今太陽神</a>が不在で気温が非常に下がってしまっています。狙い通りの場所にアンカータグが付いています!今、太陽神が、と言う意味合いの文章のところが、「今太陽神」で取られてしまっているのは気になりますが、まぁプロトタイプはこんなものでしょう。"松岡修三がバンクーバーに行ってしまったので、日本は今太陽神が不在で気温が非常に下がってしまっています。ancherStr);}System.out.println(sb);}}}細かい所はコメントに書いてあるのでざっくりと。APIをたたいてレスポンスを受け取り、そのレスポンスから必要な情報であるワードの最初の出現位置(offset)、そのワードそのもの、そしてwikilinkを取ってきます。降順に並べないと、アンカータグを追加するのが面倒なので降順に並べてoffsetをkeyにしています。後ろからアンカータグを追加していきます。(※前から並べると、どんどんoffset位置がずれていくので計算が面倒になる。)textにべた書きしてますが、実際は標準出力に持たせるとか、ファイルを何処かに入れて実行すると結果のテキストファイルを出力するとかそんな感じにすると楽かなと思います。いうわけで、たったこれだけで自動で内部リンクを生成してくれました。実際には、wikilinkが英語だったりするので修正が必要ですが、その辺は細かいので追々調整していきます。APIを使って内部リンクを自動生成してみました。ブログのSEO対策に困っている方等は参考になれば幸いです。スマートなやり方や、精度を上げる方法を知っている人がいたらコメントや問い合わせからこっそり教えて頂けたら嬉しいです。【ブログ報告】開設五か月のブログ状況とかまとめてみた。ARMS)についてまとめてみた。某配送システム白猫プロジェクトのアイシャが大好きなエンジニアの卵。Java/Shell/C++/HTML/Sass/rustかgoやりたい。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。WordPress.。