先週に引き続きドキュメントとソースコードの対応付けについて実験してみた。
手順は下記の通り。前回からの改良(?)としてword2vecで日本語→英語の変換を行ってみた。
- 英語と日本語のマニュアルからword2vecで使用できる形式で単語を抜き出す。
- 形態素解析のライブラリにはMecabを利用。
- 2.のword2vecの処理で使うためのデータ。
- PostgreSQLのソース内にあるhtml、c、hファイルを対象にファイル内に存在する単語を抜き出す。
- 単語が日本語であった場合はword2vec的に類似度の高い単語TOP10から距離に応じて英単語をランダムに選ぶ。
- ライブラリにはgensim(http://radimrehurek.com/gensim/index.html)を利用。
- 単語が日本語であった場合はword2vec的に類似度の高い単語TOP10から距離に応じて英単語をランダムに選ぶ。
- 2.で抜き出したデータに対し、TF-IDF用の辞書(単語と出現頻度)を作る。
- 2.で抜き出したデータと3.を使って、それぞれのファイルに含まれる単語に対してTF-IDFで重み付けを行う。
- データ内(PostgreSQLのソース内)にあるhtmlファイルに対してコサイン距離の近いc、hファイルを一覧化する。
結果は↓の通り。前回に比べてコサイン類似度の値自体は上がっているものの適切なソースファイルを引けているかというとやや疑問。とはいえ何もやらないよりはマシかも(?)
詳細な結果とソースは以下のURLをご参照。
--../data/postgresql-9.3.4/doc/src/sgml/html/app-createuser.html-- [ ( '../data/postgresql-9.3.4/src/bin/scripts/createuser.c', 0.5312760078128166), ( '../data/postgresql-9.3.4/src/backend/commands/user.c', 0.49654701095797743), ( '../data/postgresql-9.3.4/src/bin/pg_dump/pg_dumpall.c', 0.4521924409520057), ( '../data/postgresql-9.3.4/src/include/commands/user.h', 0.4458741678013434), ( '../data/postgresql-9.3.4/src/include/catalog/pg_authid.h', 0.4366612559172716)] --../data/postgresql-9.3.4/html-ja/app-createuser.html-- [ ( '../data/postgresql-9.3.4/src/bin/scripts/createuser.c', 0.27458665377082037), ( '../data/postgresql-9.3.4/src/bin/psql/tab-complete.c', 0.2411847340696424), ( '../data/postgresql-9.3.4/src/backend/commands/user.c', 0.20269999574142247), ('../data/postgresql-9.3.4/src/include/utils/acl.h', 0.16197452745649446), ( '../data/postgresql-9.3.4/src/bin/pg_dump/pg_backup.h', 0.16130232695577076)]
--../data/postgresql-9.3.4/doc/src/sgml/html/indexes-intro.html-- [ ( '../data/postgresql-9.3.4/src/backend/commands/indexcmds.c', 0.5887593627491802), ('../data/postgresql-9.3.4/src/include/utils/rel.h', 0.5847988052787634), ( '../data/postgresql-9.3.4/src/backend/optimizer/path/indxpath.c', 0.5736868945937168), ( '../data/postgresql-9.3.4/src/backend/catalog/index.c', 0.5695396670614502), ( '../data/postgresql-9.3.4/src/backend/optimizer/util/plancat.c', 0.5669650556082131)] --../data/postgresql-9.3.4/html-ja/indexes-intro.html-- [ ( '../data/postgresql-9.3.4/src/backend/access/rmgrdesc/spgdesc.c', 0.6065874266691939), ( '../data/postgresql-9.3.4/src/backend/access/transam/rmgr.c', 0.6055142588080052), ( '../data/postgresql-9.3.4/contrib/pg_xlogdump/rmgrdesc.c', 0.6055142588080052), ( '../data/postgresql-9.3.4/src/backend/access/spgist/spgquadtreeproc.c', 0.6054292723362433), ( '../data/postgresql-9.3.4/src/include/access/rmgrlist.h', 0.6054292723362433)]