Newer
Older
2022-ichii / paper / c119024-thesis.tex
@”任意のユーザー名” ”任意のユーザー名” on 11 Feb 2023 35 KB fix
%#!platex -kanji=%k
%#DVIPDF dvipdfmx -f ipa.map
\documentclass{jsbook}
%\pagestyle{empty}
\usepackage[dvipdfmx]{graphicx}
%\usepackage{listings, jlisting}
%\usepackage[sectionbib]{chapterbib}
\usepackage{ascmac}
\usepackage{geometry}
\usepackage{url}		% 文中にURLを書くときは \url{} で括る
\geometry{textwidth=160mm, textheight=225mm}
\renewcommand{\bibname}{参考文献}
%% タイトル %%
\title{形態素解析を用いた検索支援キーワードマップの提案}

%% 著者 %%
\author{広瀬研究室4年\\C1190245 一居洋平}

%% 日付 %%
\date {}

\begin{document}
\maketitle
% \renewcommand{\abstractname}{概要}
\begin{center}
	{\bfseries 概要}
\end{center}
キーワードマップとは,ある特定のキーワードを中心として,そのキーワードから
派生する関連キーワードを放射状ツリーで階層的につなげた図や表のことであり,
これを用いれば,特定のキーワードの関連キーワード群を視覚的に把握することが可能である。
SNSが発展した現代では検索エンジンを通して誰でも知りたい情報が取得できる一方で,
それらを用いて検索するという行為を苦手とする人が多く存在する。キーワードマップを用いれば
そのような人たちでも簡単に検索キーワードの選定をすることができる。しかし
検索キーワードの誤表記や表記ゆれがあれば正しく情報を取得することができないためそれらに対応した
キーワードマップが必要である。
そこで本研究では,検索を苦手とする人が簡単に知りたい情報を視覚的に取得可能にするために
形態素解析ツールである MeCab を用いて,検索キーワードの形態素解析を行い
表記ゆれや誤表記などに対応した検索支援キーワードマップ作成システムを作成・提案する。(422文字)

% 目次
\tableofcontents
\clearpage
% ------------------------第一章------------------------ %
\chapter{はじめに}
本章では研究の背景と目的について説明する。

\section{背景}
インターネットが急速に発展した現代では,多くが携帯型電子端末・PCなどといった情報媒体を持ち歩いている。
それによって誰でも情報の発信を行うことが容易となり,またインターネットを利用して検索をすることによって
知りたい情報を取得できるようになった。
また,行政サービスにおいても地方自治体のウェブページが各自治体で運営されており,それらは誰でも閲覧可能である。

しかしその一方で,インターネットにおける情報量の爆発的増加によって,個人が目的に合った情報を効率よく取得することが困難になっている。
マーケティングDX事業、自動車産業DX事業を営むナイル株式会社 \cite{アンケート}が行った
20代から60代の男女4407名に,普段インターネットを利用して検索をする際の,検索方法や行動に関するアンケート調査(図 \ref{fig:anke})を行った結果において,
検索エンジンを利用する際のキーワード検索方法は何かという質問に「1回検索しても答えが出ないので,複数回検索する」,「わからない」が2.5割を占めた。
知りたい情報を検索しても情報が得られないことや情報を得るために時間がかかってしまう人がいることから,
誰もが情報を容易に取得できるわけではないというのが現状である。

そのために地域自治体のウェブページなど地域色の強いウェブサービスにおいて,その地域の知識がない人が
知りたい情報を効率よく取得することは難しい。また,知識がないために誤った情報を検索してしまうことも考えられる。
そこで,この問題を解決するために目的の情報に関する知識がない人でも
利用することで,検索することに必要な情報を画像で表示する誰でも目的の情報を視覚的に理解することが可能な
検索支援システムが必要であると考えた。

\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{anke.pdf}
	\caption{検索行為に関するアンケート}
	\label{fig:anke}
\end{figure}
\section{研究目的}
本研究では目的の情報に関する知識がない人でも検索行為を行うことで安易に効率よく情報を取得できることを目的とする。
インターネット検索をすることによって目的に合った情報を効率よく取得することの支援として,
検索システムそのものを構築するのではなく,キーワード選定を支援するシステムを提案する。
キーワード選定にはキーワードマップの画像を出力することで支援する。キーワードマップはある特定のキーワードを中心として,そのキーワードから
派生する関連キーワードを放射状ツリーで階層的につなげた図や表のことである。
検索キーワードを入力することでインターネット検索に必要な検索キーワードの候補とそれに関連するキーワードを取得し,
それらの情報をキーワードマップの画像として表示することで利用者がインターネット検索に必要な情報を
取得可能な検索支援システムを提案・作成する。


% ------------------------第二章------------------------ %
\chapter{関連研究と類似サービス}
本章では,検索支援システムの関連研究と既存のキーワードマップ生成サービスを調査する。
\ref{sec:kenkyuu}節では,検索支援システムに関する研究事例について取り上げている。
\ref{sec:sav}節では,キーワードマップ生成サービスについて取り上げている。

\section{関連研究}\label{sec:kenkyuu}
検索支援システムに関する研究事例について紹介する。
一つの分野から目的の情報を取得するシステムの作成のために,
検索支援システムの研究として論文に関する研究を対象とした。

\subsection{形態素解析を用いたトレンド情報の抽出}
寺内,吉田らの研究では,学術論文の一つの分野に焦点を当てた場合で
も、非常に多くの論文が存在するためにその全てを把握することは困難であるために
知識や技術、問題定義などとして読み取れるワードを『トレンド情報』\cite{先行研究1}と呼称し、過去数年の特定分野
の論文を集積し、それらのトレンド情報を示すワードを検出し、論文の相関関係を可視化
するためのシステムの開発を行った。

特定分野として経営工学に関わる研究に焦点を当て,
その中から「経営情報学会」の論文を論文や図書・雑誌などの
学術情報を検索できるデータベース・サービス『CiNii』から数年分
収集した。トレンド情報の検出手法として形態素解析エンジン
のMeCabを用いて,論文のトレンド情報と捉えられる語句を選別することで
抽出している。
多くの論文に共通するトレンド情報に加えて、マイナーなトレンド情報
の可視化機能を実装することが課題点である。

\subsection{類似論文からの関連用語抽出による論文検索支援システム}
南浦,新美らの研究では,「検索結果の内容を吟味する」と
いうことを検索者に促すウェブ検索支援システムの構築を目的としており,
論文集合をクラスタリングすることにより類似論文を抽出し,
その結果から関連用語の提示を行う論文検索支援システムを提案・構築\cite{先行研究2}している,
このシステムは,関連用語と類似論文の提示により,ユーザの専門知識不足を補い,
効率よく論文を検索することが可能であるとしている。
検索キーワードと検索結果の比較に関する検討を行うことと,システムの改善が課題点である。


\section{キーワードマップ生成サービス}\label{sec:sav}
キーワードマップとは,ある特定のキーワードを中心として,そのキーワードから
派生する関連キーワードを放射状ツリーで階層的につなげた図や表のことである。
特定のキーワードの関連キーワード群を視覚的に把握することが可能であり,
検索キーワードの選定やコンテンツ作成などに用いられている。
本研究における検索支援システムは検索キーワードとそれに関連するキーワードの情報に関するキーワードマップを画像として生成する。
検索キーワードの候補とその候補に関連したキーワードであるセカンドキーワードの情報を誰でも視覚的に把握することが可能であるために
画像としてキーワードマップを用いる必要がある。
そこで,キーワードマップ生成サービスについて調査し,キーワードマップの課題点を探る。

\subsection{keysearch Beta}
\footnote{“keysearch Beta" \url{https://kitsune-room.com/tools/keysearch/}}keysearch Beta は無料で利用可能なキーワードマップ作成ツールである。
検索フォームにワードを入力し検索することで,主に Google サジェストから検索した
キーワードと関連するキーワードを自動で取得し,キーワードマップを作成することができる (図 \ref{fig:keybeta} )。
また作成したキーワードマップから関連するワードのみを抽出し,CSV・SVG形式で保存することも
可能である。
keysearch Beta で作成されたキーワードマップは入力したキーワードのセカンドキーワード
までを抽出した二階層になっており,ひと目で情報を整理することができるという特徴がある。
しかし,入力したキーワードのセカンドキーワードまでしか表示されないことから,関連キーワード
を網羅することができず,キーワード選定には向いていない。
\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{key.pdf}
	\caption{keysearch betaのキーワードマップ}
	\label{fig:keybeta}
\end{figure}

\subsection{OMUSUBI}
\footnote{“OMUSUBI" \url{http://omusubisuggest.appspot.com/}}OMUSUBI は無料で利用可能なキーワードマップ作成ツールである。 
検索フォームにキーワードを入力することで Google・Youtube・Amazon・Bing検索
などのサジェストを自動取得し,それぞれの検索エンジンに沿った
キーワードマップを作成することができる (図 \ref{fig:OMUSUBI} ) 。 OMUSUBI で作成されたキーワードマップ
はスクロールで大きさの調整やドラッグすることで上下左右への移動,
ノードをクリックすることでそのキーワードを中心に配置することができ,
キーワードの関連性を階層ごとに把握しやすいことが特徴として挙げられる。
しかし,キーワードマップが表示されないことやノードが重なり
キーワードマップとして見づらいことなど不便な部分もある。


\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{omu.pdf}
	\caption{OMUSUBIのキーワードマップ}
	\label{fig:OMUSUBI}
\end{figure}

\section{キーワードマップ生成サービスの課題点}\label{sec:kadai}
課題点として,一つ目は正確なキーワードを入力しなければ,取得したい情報が得られないという点である。
検索フォームに入力されたキーワードの表記ゆれによって,サービスの利用者が取得したい情報とは異なる情報の
キーワードマップが生成されることがあるため,一度の検索で入力するキーワードの表記ゆれに対応した検索システム
が必要となる。
二つ目は,文章のような長いキーワードを入力した場合,キーワードマップが生成されないという点である。
キーワードマップ生成サービスは, Google などの検索サジェストからキーワードを取得しているため,
検索キーワードが検索サジェストに一致しない場合,関連キーワードを取得することができない。よって,
あらかじめ入力された検索キーワードを整理し,検索サジェストに一致しやすくする必要がある。


% ------------------------第三章------------------------ %
\chapter{提案}
本章では, \ref{sec:kadai} 節で挙げた課題点を踏まえてそれを解決するためのシステムの提案を行う。
\ref{sec:teian}節では本研究における提案を行う。\ref{sec:kaizennann}節では\ref{sec:kadai} 節で挙げた課題点を踏まえた改善案を定義する。
\ref{sec:aimai}節ではあいまい検索と形態素解析に関する説明を行い,\ref{sec:gaiyou}節ではシステムの概要について説明する。

\section{本研究の提案}\label{sec:teian}
本研究では,検索支援としてキーワード選定に利用可能であり,
検索キーワードを入力することでその検索キーワードのサジェストとそれに関連するキーワードの情報をまとめた
キーワードマップの画像を生成することが可能な検索支援システムを構築する。

 \ref{sec:kadai} 節で挙げた課題点を踏まえて表記ゆれや文章などインターネット検索することに適していないキーワードを
入力した場合でもキーワードマップの画像を生成するシステムを目指す。

また,検索支援機能として他にサジェスト機能と検索履歴表示機能が挙げられるが
検索エンジンで文字を入力した際に関連キーワードを予測表示するサジェスト機能は本研究では
キーワードマップを用いることで視覚的に関連キーワードの情報をより多く取得できるために利用しない。
入力した検索キーワードの履歴やウェブサイトの閲覧履歴などを検索する際に表示する検索履歴表示機能は
本研究の目的である検索支援としてのキーワード選定の利用には利用者が取得したい情報とは関係のない情報を取得してしまうために
本研究では利用しない。

\section{課題点を踏まえた改善案}\label{sec:kaizennann}
 \ref{sec:kadai} 節で挙げた課題点を踏まえて,キーワードマップ生成に関する改善案を以下のように定義した。

\begin{itemize}

	\item 検索キーワードの表記ゆれ
	
	入力された検索キーワードの表記ゆれは検索サジェストを取得する前に検索キーワードの
	あいまい検索を行うことによって,正確な情報を取得可能にする。

	\item 検索キーワードの整理
	
	文章のような長いキーワードを入力した場合,検索サジェストと一致しやすくするために
	キーワードの形態素解析を行うことによって,そのキーワードのうち検索に適した要素のみを抽出する。

	\item キーワードマップの網羅性
	
	多くのキーワードの選定を可能にするためには作成されたキーワードマップ内の関連キーワードを多く
	取得する必要がある。そこで,関連キーワードをより多く取得するために検索キーワードから取得した
	サジェストからそれを検索キーワードとして再度検索サジェストを取得する。この動作を数回繰り返すこと
	によって,よりキーワード選定に向けたものにする。

\end{itemize}

\section{あいまい検索の活用}\label{sec:aimai}
あいまい検索は,検索キーワードとして入力された情報と類似した情報を検索結果として取得することが可能な
検索機能である。あいまい検索の処理方法は,取得した検索キーワードを言葉として意味を有する部分文字列を
選別し,それらを出現回数や出現集中度を考慮したスコアを算出するという構造となっている。

\subsection{検索キーワードの形態素解析}
検索キーワードの整理には形態素解析を用いる。形態素解析は自然言語処理の一部であり,自然言語を言葉が
意味を有する表現要素の最小単位である形態素まで分割し,それらを品詞として分類,判別する文字列抽出法である。
この技術は検索エンジンの処理やニュースアプリにおける画面上のタイトルの文字組みなどで活用されている。


\section{システム概要}\label{sec:gaiyou}
本研究では,検索キーワードを入力することで,その検索キーワードの情報を中心とした
キーワードマップの生成が可能なシステムを作成する (図 \ref{fig:gainennzu} ) 。このシステムは Ruby を利用して
作成され,検索キーワードに関する情報はGoogleサジェストから取得している。
検索キーワードの表記ゆれや長い検索キーワードなどを入力した場合でも,情報を取得し
誰でも簡単に利用可能で,より多くの情報を取得することでキーワードの選定に向けたものとする。

\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{gainennzu.pdf}
	\caption{キーワードマップ作成プログラムの流れ}
	\label{fig:gainennzu}
\end{figure}

% ------------------------第四章------------------------ %
\chapter{システムの設計}\label{cha:sekkei}
本章では,システムの設計を行う。\ref{sec:kousei}節ではシステムの全体構成について説明し,
\ref{sec:kankyou}節ではシステムの使用技術・開発環境について説明する。

\section{システムの全体構成}\label{sec:kousei}
本システムは Ruby プログラムで作成する \cite{Ruby}。
Rubyは文字列の正規表現処理に優れており,形態素解析した検索キーワードから必要な情報を抽出することに適しているために
採用する。検索キーワードの形態素解析には MeCab を用いて行う \cite{MeCab}。MeCab は様々なプログラミング言語で利用可能なエンジンであり,
Ruby プログラム内での処理が可能であるために採用する。マップ画像の生成には Graphviz を用いる \cite{Graphviz}。
Graphvizは Ruby プログラム内の画像生成が可能であるために採用する。

\section{使用技術/開発環境}\label{sec:kankyou}
本節では本システムで使用する技術についてまとめる。

\subsection{Ruby}
Rubyはまつもとゆきひろによって開発されたオブジェクト指向のプログラミング言語である 。国産の
プログラミング言語としては日本初の国際電気標準会議において国際規格に認証されている。特徴として
クラス定義,ガベージコレクション,強力な文字列操作や正規表現処理・マルチスレッド・例外処理機能・
イテレーター・クロージャ・Mixin・演算子オーバーロードなどの機能がある。
Ruby は本システム内の検索キーワードの正規表現処理と検索サジェストの取得するプログラムとして
利用する。本研究で用いるRubyのバージョンはRuby 2.7.0 を用いる。

\subsection{MeCab}
MeCabは京都大学情報学研究科と日本電信電話株式会社コミュニケーション科学基礎研究所の共同
ユニットプロジェクトを通じて,開発されたオープンソースの形態素解析エンジンである 。言語・辞書・コーパス
に依存しない汎用的な設計方針を採用しており,数多くのプログラミング言語で使用することが可能である。
MeCabによる形態素解析の実行結果は,入力した自然分を形態素にまで分解した後にそれぞれ
表層形,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音という流れで出力される。
本システムでは,MeCabによる形態素解析の出力結果を Ruby のプログラム内で利用するためにMeCab-Rubyを用いる。

\begin{itembox}[l]{MeCabによる形態素解析の例}
	\begin{verbatim}
		~$ mecab
		この文章を形態素解析します
		この	連体詞,*,*,*,*,*,この,コノ,コノ
		文章	名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
		を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
		形態素	名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
		解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
		し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
		ます	助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
		EOS \end{verbatim}
	\end{itembox}

\subsection{Graphviz}
Graphiviz(Graph Visualization Software)はAT\&T研究所によって開発されたオープンソースのグラフ画像作成ツールである \cite{Graphviz}。
データ記述言語の一種で,グラフをデータ構造としてプレーンテキストで表現する言語であるDOT言語を用いて,
テキストファイルをpngやjpegなどの画像ファイルに変換することで,グラフ画像を生成することができる。
本システムでは,入力された検索キーワードと取得した検索サジェストのデータをキーワードマップの画像として生成するために
用いる。また, Ruby のコードからGraphvizによるグラフ生成を可能にするためにGvizを用いて画像を生成する \cite{Gviz}。



% ------------------------第五章------------------------ %
\chapter{システム開発}
 \ref{cha:sekkei} 章を元に検索キーワードとその検索サジェストを取得し,キーワードマップ画像を生成する検索支援システムの開発を行う。
 本システムは図\ref{fig:gainennzu}の流れをもとに作成される。

\section{検索キーワードの入力と形態素解析}\label{sec:gets}
検索キーワードを入力し,その検索キーワードの形態素解析を行う。
キーワードマップとして生成するための核となる検索キーワードを文字列としてキーボードからのデータ入力を可能にする。
取得したデータをもとにMeCab::Taggerクラスのインスタンスを取得し,形態素解析の結果を文字列で取得する。
形態素解析を行うことによって,品詞・読みなどの単語の情報を取得し,検索キーワードから検索に適した名詞の単語を抽出することが可能となる。
形態素解析の結果はそれぞれ表層形と形態素解析の結果である文字列が
品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音という順番で出力され,最後にEOS(End Of String)と出力される。
検索キーワードとして利用する箇所は原形・読み・発音の三種類である。これらを組み合わせて表記ゆれや誤表記に対応した検索キーワード
生成する。これらの要素を文字列から抽出し,利用するために表層形とそれ以外の文字列というように二種類の文字列に分割する必要がある。
全ての文字列を分割し配列に要素を入れる処理を行う。


\begin{itembox}[l]{検索キーワードの形態素解析}
	\begin{verbatim}
		sentence = gets.chomp
		tagger = MeCab::Tagger.new
		keyword = tagger.parse sentence
		array = keyword.split
		array2 = keyword.split
		\end{verbatim}
	\end{itembox}

\section{検索キーワードの構築}\label{sec:key}
本節では形態素解析した文字列を検索キーワードとして再構築するコードの処理について説明する。
 \ref{sec:gets}節で行った処理から検索キーワードとして利用するために
検索キーワードを形態素解析した情報の入った配列arrayから不必要な情報を抽出する必要がある。
図 \ref{fig:koutiku}は検索キーワードに『東北地方』と入力した場合のシステムの流れである。
不必要となる情報は形態素解析の結果の品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形の部分と文字列のEOSである。
EOSは文字列のEOSをマッチさせることで配列arrayから除外する。
形態素解析の結果の品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形の部分は正規表現を用いる。
原形はMeCabの辞書とマッチした表層形と同じ文字列で出力されるため,正規表現で表層形の文字列を指定して原形以降の文字列を抽出し,
それ以前の文字列は配列arrayから除外する。同じ文字列と区切り文字はsplitメソッドとuniqメソッドを利用することで除外する。
また,検索キーワードに存在しない単語やMeCabの辞書に未登録の単語を入力した場合は形態素解析の結果として原形が出力されないために
表層形と同じ文字列をその要素に入れる処理を行う。

これらの処理を行った配列arrayから表層形の文字列を除外する処理を行う。表層形の文字列は配列arrayの奇数番目に位置する要素であるために
each\_sliceメソッドとmapメソッドを利用して,奇数番目の要素を抽出し,除外する。
injectメソッドとmapメソッドを利用して配列array内に残った要素同士で総当りで組み合わせの配列を生成し,
その配列内の要素をjoinメソッドによって結合することによって表記ゆれや誤表記に対応された検索キーワードが生成される。


\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{koutiku-1.pdf}
	\caption{検索キーワードの構築}
	\label{fig:koutiku}
\end{figure}

\begin{itembox}[l]{検索キーワードの生成のコード}
	\begin{verbatim}
array.delete("EOS")
i = 0
(array.length/2).times do
if /#{array[i]}/ =~ array[i+1]
   array[i+1] = array[i]+$'
   array[i+1] = array[i+1].split(/[,|\/]/)
   array[i+1] = array[i+1].uniq
   i += 2 
else
   array[i+1] = [array[i]]
   i += 2
end
end

i = 0
array = array.each_slice(2).map(&:last)
if array.length > 1
array = array.inject(:product).map(&:flatten)
array.length.times do
array[i] = array[i].join()
    i += 1
end
else 
    array= array[0]
end
		\end{verbatim}
	\end{itembox}


\section{検索サジェストの取得}\label{sec:suggest}
本節では検索サジェストの取得とそれのセカンドキーワードの取得について説明する。
本システムでは検索サジェストとしてGoogleサジェストを取得する。Googleサジェストの取得にはGoogle Suggest APIを利用する。
Google Suggest APIは下記のURL末尾にサジェストを取得したい検索キーワードを入力すると,XML 形式で検索サジェストが
取得できるAPIである (図 \ref{fig:gglapi} ) 。


\begin{itembox}[l]{Google Suggest API}
	\begin{verbatim}
		url = "https://www.google.com/complete/search?hl=ja&output=toolbar&q=#[検索キーワード]"
		\end{verbatim}
	\end{itembox}

\begin{figure}[htb]
		\centering
		\includegraphics[width=15cm]{googleapi.pdf}
		\caption{Google Suggest APIのサジェスト取得画面}
		\label{fig:gglapi}
\end{figure}
図 \ref{fig:suggestgets} はサジェストを取得する処理の流れである。
XML形式で取得したデータはURI.openメソッドを用いて,文字列としてRuby内に読み込む。
RubyでXMLから目的の要素を取り出す処理を行うためにremxlライブラリを利用する。
DOMの子要素を取り出すelementsメソッドで不必要な要素を指定することで検索サジェストのみを抽出し,配列suggestにその結果を
格納する。
これらの処理を \ref{sec:key} 節で生成した検索キーワードの要素の数だけ繰り返し,全ての検索サジェストを抽出する。
同じ検索サジェストはuniqメソッドを用いることで配列suggestから除外する。

セカンドキーワードの取得は検索サジェストの取得で行った処理と同様に取得した検索サジェストをもとに行うことによって
取得する。

\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{suggestgets.pdf}
	\caption{サジェスト取得処理の流れ}
	\label{fig:suggestgets}
\end{figure}

\begin{itembox}[l]{検索サジェスト取得の処理}
	\begin{verbatim}
		saggest = Array.new
		array.length.times do
		key = array[i]
		url = "https://www.google.com/complete/search?hl=ja&output=toolbar&q=#
		{Addressable::URI.encode(key)}"
		response = URI.open(url)
		response.charset
		encoded = response.read.encode('UTF-8', response.charset)
		doc = REXML::Document.new(encoded)
		doc.elements.each('toplevel/CompleteSuggestion/suggestion') do |e|
		saggest[j] = e.attributes['data']
		j += 1
		end
		i += 1
		end
		suggest = suggest.uniq
		\end{verbatim}
	\end{itembox}


\section{キーワードマップの生成}
本節では \ref{sec:suggest} 節で取得した検索サジェストをデータをもとにキーワードマップを生成するコードの処理について説明する。
キーワードマップの生成はGvizを用いて行う。
Gvizは Ruby のコードからGraphvizによるグラフ生成を可能にするツールである。

キーワードマップの設定としてキーワードマップのレイアウト・ファイル名・フォントサイズ・ノードの重なりなどの
設定を行う。ノードとはグラフ内における丸や点で表される頂点となるものである。
キーワードマップをより見やすくするために,レイアウトは環状型にしてノード同士が重ならない設定にする。

キーワードマップの中心となる検索キーワードとそれに関連するキーワードの設定を行う。作成するキーワードマップは
検索キーワードを中心のノードとして環状型に関連キーワードのノードが展開されるマップである。
 \ref{sec:gets} 節で入力された検索キーワードである変数sentenceを中心に位置するノードとして設定し表示する。
同様に関連キーワードとなるノードは前節で取得した検索サジェストの要素が入った配列suggestを設定する。
グラフ内におけるノード間の接続を表す役割を持った線であるエッジは
検索キーワードとなる中心ノードから関連キーワードのノードへと接続するように表示させる。

これらの設定を検索サジェストの全要素で行い,同様の設定を検索サジェストと前節で取得した全てのセカンドキーワードをもとに行う。
全ての処理を終えるとキーワードマップが生成される。

\begin{itembox}[l]{キーワードマップの設定コード}
	\begin{verbatim}
		gv = Gviz.new
		gv.graph do
		global layout:'circo', label:"#{sentence}", fontsize:20, size:15, overlap:false
		node :"sentence", {label:sentence}
		suggest.length.times do
		node :"suggest#{i}", {label: suggest[i]} 
		route :"sentence" => [:"suggest#{i}"]
			suggest2[i].length.times do
			node :"suggest#{i}q#{j}", {label: s[i][j]} 
		route :"suggest#{i}" => [:"suggest#{i}q#{j}"]
		j += 1
	    end
		i += 1
		j = 0
		end
		end
		gv.save( :keywordmap, :png )  
		\end{verbatim}
	\end{itembox}

\section{検索サジェストが取得できない場合の改善案}
本節では検索サジェストが取得できない場合に行う検索キーワードの整理について説明する。
文章のような長い検索キーワードはGoogle Suggest APIから検索サジェストを取得することができない場合がある。
この場合の改善案として,検索キーワードの形態素解析を行った際に取得した品詞の種類から名詞である単語のみを抽出し,
それを検索キーワードとして再度検索サジェストの取得処理を行う。


\begin{itembox}[l]{検索キーワードの整理}
	\begin{verbatim}
	if suggest.empty?
    v, x, z = 0, 0, 0 
    array3 = []
    array3[v] = []
    (array2.length/2).times do
    array3[v][x] = array2[z]
    x +=1
    z +=1
    array3[v][x] = array2[z]
    array3[v][x].sub!(/,.*/m,"")
    z +=1
    x = 0
    v +=1 
    if v < array2.length/2
    array3[v] = []
    end
    end
    array3.select! {|dt|
        dt.include?"名詞"
    }
    array3 = array3.transpose[0]
    array3 = array3.join(" ")
end
		\end{verbatim}
	\end{itembox}
\section{生成したキーワードマップ}
生成したキーワードマップは図 \ref{fig:keymap}である。
入力した検索キーワードからそれに関連する検索サジェストをセカンドキーワードまでの情報を表示しているため
視覚的に多くの情報を把握することが可能である。

\begin{figure}[htb]
	\centering
	\includegraphics[width=15cm]{keymap.pdf}
	\caption{生成したキーワードマップ}
	\label{fig:keymap}
\end{figure}

\chapter{結論}

\section{結論}
本研究では,検索することが苦手な人に向けた形態素解析を用いた検索支援のキーワードマップを生成するRubyプログラムを作成した。
作成されるキーワードマップは検索に向かない検索キーワードを入力した場合でもキーワードマップとして生成されるため
検索することが苦手な人でも求める情報を取得することができる。

\section{今後の展望}
今後の展望として,検索サジェストを取得するためにキーワードマップの生成に時間がかかってしまう。また,作成されたキーワードマップ
は視覚的に見づらい部分があるためにより見やすいマップの生成を行っていく。


\begin{thebibliography}{99}
	\bibitem{アンケート} ナイル株式会社.“ユーザーの検索行動に関するアンケート調査|2022年8月実施"

	\url{https://www.seohacks.net/blog/15870}, (参照 2022-12-11).

	\bibitem{先行研究1} 寺内 貴洋,吉田 典正, 齋藤 敏雄.“形態素解析を用いたトレンド情報の抽出と可視化システムの構築".日本大学生産工学部第45回学術講演会講演概要.2012,5,39,p.1021-1022.

	\url{https://www.mlit.go.jp/common/000228861.pdf}, (参照 2022-12-11).

	\bibitem{先行研究2} 南浦 佑介,新美 礼彦.“類似論文からの関連用語抽出による論文検索支援システムの提案".言語処理学会 第 17 回年次大会 発表論文集.2011,p.69-72.

	\url{https://www.anlp.jp/proceedings/annual_meeting/2011/pdf_dir/C1-3.pdf}, (参照 2022-12-18).

	\bibitem{Ruby} まつもとゆきひろ.“Ruby"

	\url{https://www.ruby-lang.org/ja/}, (参照 2022-12-13).

	\bibitem{MeCab} 工藤 拓.“MeCab: Yet Another Part-of-Speech and Morphological Analyzer"

	\url{https://taku910.github.io/mecab/}, (参照 2022-12-13).

	\bibitem{Graphviz} AT\&T研究所.“Graphviz"

	\url{https://graphviz.org/}, (参照 2022-12-13).

	\bibitem{Gviz} MELBORNE.“Gviz"

	\url{http://melborne.github.io/Gviz/}, (参照 2022-12-13).
\end{thebibliography}


\end{document}