中国語学習×グラフデータベース(11) - 類語を結びつける
ひとまず、単語(キーワード)の一部と短文をつなげるところまで来たので、今回は類義語どうしをつないでみる。
ネタ元はこれ
- 作者: 于鵬,平山邦彦,川田直樹
- 出版社/メーカー: アスク出版
- 発売日: 2010/04/28
- メディア: 単行本(ソフトカバー)
- クリック: 1回
- この商品を含むブログを見る
正確には、これの中国語版(当時58元)。ただし、日本で手に入れるのであれば、2800円払って日本語版の方が良いと思う。例文のCDが付いているので、この方がお買い得なはず。日本語タイトルからは分かりづらいけど、中国語を学ぶ留学生が躓きそうな500組の単語の使い分けについて例文付きで解説している。ちなみに北京語言大学出版から、辞典形式で1700組取り上げた本もあるし、日本で出版されたこんな本もある。
- 作者: 相原 茂
- 出版社/メーカー: 朝日出版社
- 発売日: 2015/05/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
今のところお試しの意味合いもあるので、500組程度で十分かなと思い、500組の単語をタブ区切りファイルで作ってみた。同じ行にある単語は類義語の組み合わせというイメージだ。カンマ区切りのCSVではなくタブ区切りになったのは、デフォルトでSHIFT-JISにしてしまうEXCELのせいだと声高に言っておくw。
タブ区切りファイルを読み込む
取り込み用のコードをPythonで書くとこんな感じになった。本当は500組一気に取り込むつもりだったが、とりあえず先頭の259組を取り込んでみた。
combinations = [] with open('aton_sample.csv', encoding='utf-8') as f: for row in f.readlines(): newset = [word for word in row[:-1].split('\t') if word] combinations.append(newset) print(len(combinations))
259
今考えると、combinationsというListの名称は別の名前にするべきだったかなと思うが、Python的なポイントはそこではなく、for文の次にあるnewsetをリスト内包表記で取得している部分になる。
row[:-1]は行末の改行コードを取り除き、split('\t')は、行データをタブで分割している。ただし、行によって含まれる単語数が違う関係で、空っぽのデータが取得された場合はそれを無視してListを作るというイメージだ。そのListをさらにcombinationsというListにappend()しているという流れだ。
Keywordはすでに存在しているかのチェック
単語については、HSKの綱領に載っているもの、類義語の組み合わせについては別の本から持ってきているので、当然のことながら単語として登録されていない類義語が登場してくる可能性があるので、念のためチェックしてみた。
unknown_words = [] known_words = [] for wordset in combinations: ws = graph.cypher.execute("MATCH (w:Word) WHERE w.keyword in {0} RETURN w.keyword".format(str(wordset))) found_words = [] for record in ws: found_words.append(record['w.keyword']) known_words.append(record['w.keyword']) for word in wordset: if word not in found_words: unknown_words.append(word) known_words = set(known_words) # To be a SET unknown_words = set(unknown_words) # To be a SET print("Found {0} known words".format(len(known_words))) print("Found {0} unknown words".format(len(unknown_words)))||< >|| Found 521 known words Found 89 unknown words
これは、1回失敗したのを踏まえてロジックを調整したものになる。具体的には、今回登録した類義語の組み合わせの中に、単語として登録されていないキーワードが複数回登場した場合を考慮するために、生成されたunknown_wordsの中身をsetとして読み込み直して重複を排除している。後で取り上げるつもりだが、誤って重複して登録してしまった場合のNodeの削除が結構面倒くさい。
次回は、未登録単語の登録から類義語間のRelationshipを設定するところまで行こうと思う。
(つづく)
最初の本は、Cypherのリファレンス的にも使えたりして、日本語では一番充実していると思ってる。
- 作者: Neo4jユーザーグループ,長瀬嘉秀
- 出版社/メーカー: リックテレコム
- 発売日: 2016/02/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門
- 作者: Ian Robinson,Jim Webber,Emil Eifrem,佐藤直生,木下哲也
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/03/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
A Programmatic Introduction to Neo4j
- 作者: Jim Webber,Ian Robinson
- 出版社/メーカー: Addison-Wesley Professional
- メディア: ペーパーバック
- この商品を含むブログを見る