SlideShare a Scribd company logo
シソーラス辞書検索
2013.6.1
Cocoa勉強会 関西
大森智史
@oogon / satoshi.oomori
2013年 6月 1日 土曜日
• スライド、サンプルは基本的にすべて公開し
ます。
• 後ほどFacebookページにて
2013年 6月 1日 土曜日
あんた、誰?
• と、いうわけで自己紹介。
2013年 6月 1日 土曜日
• 大森智史といいます。
• Objective-Cで遊んでます。
• Cocoa勉強会関西は第0回からいます。
2013年 6月 1日 土曜日
• iOS本、電子書籍版はまだまだ、3048円でご提供中です。
• https://play.google.com/store/books/details?id=2TgvD5PYKvAC
2013年 6月 1日 土曜日
• と、いうことで本題に
2013年 6月 1日 土曜日
シソーラス辞書検索
2013年 6月 1日 土曜日
• シソーラス(Thesaurus)とは、単語の上位/
下位関係、部分/全体関係、同義関係、類義関
係などによって単語を分類し、体系づけた辞
書。
【thesauros】
ja.Wikipedia.org
2013年 6月 1日 土曜日
• ようするに関係性を持った辞書ですね。
2013年 6月 1日 土曜日
• 同義・類義関係の場合
2013年 6月 1日 土曜日
• たとえば、「日本」を検索する時に...
• 「日本」を表す言葉として「日本」
「Japan」「JPN」「にほん」「にっぽん」
「やまと」「倭」などがあります。
• 「日本」という言葉だけでは他の言葉は検索
漏れしてしまいます。
2013年 6月 1日 土曜日
• だから、「日本」を検索するときに「日本」
以外に「Japan」「JPN」「にほん」「にっ
ぽん」「やまと」「倭」なども検索語として
使う、ということです。
2013年 6月 1日 土曜日
• 同じ意味を持つ言葉を検索する場合
• 同じ意味を持つ言葉を一つのグループとして
扱う辞書が必要になります。
2013年 6月 1日 土曜日
• 『分類語彙表』(国立国語研究所)
• 『日本語語彙大系』(岩波書店)
• 『角川類語国語辞典』(角川書店)
• 『日本語大シソーラス』(大修館書店)
• 『EDR概念体系辞書』(EDRプロジェクト)
• 『デジタル類語辞典』(ジャングル)
• 『JST科学技術用語シソーラス』(JST科学技術振興機構)
シソーラス辞書の例
ja.Wikipedia.org
2013年 6月 1日 土曜日
• iOSで使える物はあるか?
2013年 6月 1日 土曜日
• あります。
2013年 6月 1日 土曜日
• しかも無料!
2013年 6月 1日 土曜日
• 今日はWordNetのご紹介
2013年 6月 1日 土曜日
• WordNet(わーどねっと)は英語の概念辞書(意味辞書)であ
る。WordNetでは英単語がsynsetと呼ばれる同義語のグループ
に分類され、簡単な定義や、他の同義語のグループとの関係が
記述されている。 WordNetの目的は直感的に使うことのできる
辞書とシソーラスが組み合わされた成果物を作ること、および
自動的文書解析や人工知能のアプリケーションの実現を支援す
ることにある。WordNetのデータベースやソフトウェアはBSD
ライセンスによって公開され、自由にダウンロードして用いる
ことができる。データベースはオンラインで参照することもで
きる。
WordNet
ja.Wikipedia.org
2013年 6月 1日 土曜日
• WordNet(わーどねっと)は英語の概念辞書(意味辞書)であ
る。WordNetでは英単語がsynsetと呼ばれる同義語のグループ
に分類され、簡単な定義や、他の同義語のグループとの関係が
記述されている。 WordNetの目的は直感的に使うことのできる
辞書とシソーラスが組み合わされた成果物を作ること、および
自動的文書解析や人工知能のアプリケーションの実現を支援す
ることにある。WordNetのデータベースやソフトウェアはBSD
ライセンスによって公開され、自由にダウンロードして用いる
ことができる。データベースはオンラインで参照することもで
きる。
WordNet
ja.Wikipedia.org
2013年 6月 1日 土曜日
• WordNet(わーどねっと)は英語の概念辞書(意味辞書)であ
る。WordNetでは英単語がsynsetと呼ばれる同義語のグループ
に分類され、簡単な定義や、他の同義語のグループとの関係が
記述されている。 WordNetの目的は直感的に使うことのできる
辞書とシソーラスが組み合わされた成果物を作ること、および
自動的文書解析や人工知能のアプリケーションの実現を支援す
ることにある。WordNetのデータベースやソフトウェアはBSD
ライセンスによって公開され、自由にダウンロードして用いる
ことができる。データベースはオンラインで参照することもで
きる。
WordNet
ja.Wikipedia.org
でも、英語やんか?
2013年 6月 1日 土曜日
• WordNetの日本語版があるんです!
2013年 6月 1日 土曜日
• その名も日本語WordNet!
2013年 6月 1日 土曜日
• その名も日本語WordNet!
そのままや!
2013年 6月 1日 土曜日
• 日本語WordNet
• http://nlpwww.nict.go.jp/wn-ja/
2013年 6月 1日 土曜日
• 辞書の内容はこんな感じです。(2013.5.25現在)
2013年 6月 1日 土曜日
• いろんな人が、利用するための関数やメソッ
ドやらを公開しています。
2013年 6月 1日 土曜日
• いろんな人が、利用するための関数やメソッ
ドやらを公開しています。
2013年 6月 1日 土曜日
• いろんな人が、利用するための関数やメソッ
ドやらを公開しています。
おお!
2013年 6月 1日 土曜日
• と、いうことで
• 使い方を説明しますね。
2013年 6月 1日 土曜日
まず、普通の検索 
WordNetJPN before
DEMO
2013年 6月 1日 土曜日
「人間」という言葉を検索すると、
「人間」という言葉が含まれる文章
のみを抽出します。
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
2013年 6月 1日 土曜日
類義語検索 
WordNetJPN
DEMO
2013年 6月 1日 土曜日
「人間」という言葉を検索すると、
「人間」の他、「賢者」「人」「他
人」など、「人間」に含まれる概念
を含む文章を抽出します。
2013年 6月 1日 土曜日
人間
2013年 6月 1日 土曜日
人間 人間
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
人間関係を変える
人間
賢者は相手をやっ
人を批判すると、
賢者
人
2013年 6月 1日 土曜日
ちなみに
2013年 6月 1日 土曜日
判定の方法
n-gramと形態素解析
2013年 6月 1日 土曜日
• サンプルでは検索文字が含まれるか?という
判断をしていますが、これはこれで問題があ
ります。
2013年 6月 1日 土曜日
• 「京都」のレストランを探したいのに...
• 「東京都新宿区」がヒットすることが、Web
などで昔はありました(さすがに今はない)
• (n-gramと呼ばれる検索手法...)
2013年 6月 1日 土曜日
東京都新宿区の
京都
東京
京都
都新
新宿
宿区
区の
2文字を比較 (bi-gram)
2013年 6月 1日 土曜日
東京都新宿区の
京都
東京
京都
都新
新宿
宿区
区の
2文字を比較 (bi-gram)
2013年 6月 1日 土曜日
東京都新宿区の
京都
東京
京都
都新
新宿
宿区
区の
2文字を比較 (bi-gram)
ここがヒットしてしまう。
2013年 6月 1日 土曜日
• そこで
2013年 6月 1日 土曜日
• 検索される文字列を事前に形態素解析する方
法もあります。
2013年 6月 1日 土曜日
東京都 新宿区 の
京都 市内 で 唯一 の
京都
形態素解析を使用
2013年 6月 1日 土曜日
東京都 新宿区 の
京都 市内 で 唯一 の
京都
形態素解析を使用
2013年 6月 1日 土曜日
おまけ
2013年 6月 1日 土曜日
WordNet辞書を覗く
どのような語が同義語として収録されているか?
WordNetJPN
DEMO
2013年 6月 1日 土曜日
日本語WordNetの類義語検索を行い
ます。
2013年 6月 1日 土曜日
• 「生まれ」と同じ意味を持つ語が列挙されま
す。
2013年 6月 1日 土曜日
使い方
2013年 6月 1日 土曜日
• 前準備
2013年 6月 1日 土曜日
日本語WordNetを使うのに必要なファイル
• wnjpn.db
 WordNet データベースファイル
(NICTにて配布中、2013.6.1現在Ver1.1、英語版3.0を
ベースにしている)
• WordNetJPN.h(配布中)
• WordNetJPN.m(配布中)
2013年 6月 1日 土曜日
日本語WordNetを使うのに必要なファイル
• sqlite3.h
 SQLiteを使うためのヘッダファイル(リンク)
• libsqlite3.dylib
 SQLiteを使うためのライブラリ(リンク)
2013年 6月 1日 土曜日
• sqlite3.h
/Applications/Xcode.app/Contents/Developer/Platforms/
iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/
include/sqlite3.h
普通にリンクすると「Relative to SDK」になります。
usr/include/sqlite3.h
• libsqlite3.dylib
/Applications/Xcode.app/Contents/Developer/Platforms/
iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/
libsqlite3.dylib
2013年 6月 1日 土曜日
• WordNetJPN.mクラス メソッド説明
2013年 6月 1日 土曜日
• Synsetクラス
• 概念を表す
• @interface Synset : NSObject {
! NSString *pos;!! //品詞(名詞=n、動詞=v、形容詞=a、=r)
! NSString *synset;! //関連ID("06589574-n")
! NSString *src;!! //("eng30")!
! NSString *name;! ! //名称("publication")
}
2013年 6月 1日 土曜日
• Senceクラス
• @interface Sense : NSObject {
! int rank;!! ! //
! int lexid;! ! ! //
! NSString *__unsafe_unretained synset;! //
! int freq;!! ! //
! NSString *__unsafe_unretained src;!! //
! NSString *__unsafe_unretained lang;! ! //言語(日本語
=jpn、英語=eng)
! int wordid;!! ! //語 ID(1から始まる整数)
}
2013年 6月 1日 土曜日
• Wordクラス
• 語についての詳細
• @interface Word : NSObject {
! int wordid;!! //語 ID(1から始まる整数)
! NSString *__unsafe_unretained lang;!//言語(日本語=jpn、英語=eng)
! NSString *__unsafe_unretained lemma;//語("理性的"、"アルデヒド")
! NSString *__unsafe_unretained pron;!//
! NSString *__unsafe_unretained pos;! //品詞(名詞=n、動詞=v、形容詞
=a、=r)
! NSString *__unsafe_unretained gloss;! // kaisetu
}
2013年 6月 1日 土曜日
• Synlinkクラス
• 関連性を表す
• @interface Synlink : NSObject {
! NSString *__unsafe_unretained synset1;
! NSString *__unsafe_unretained synset2;
! NSString *__unsafe_unretained link;
! NSString *__unsafe_unretained src;
}
! @property (nonatomic, unsafe_unretained) NSString *synset1;
! @property (nonatomic, unsafe_unretained) NSString *synset2;
! @property (nonatomic, unsafe_unretained) NSString *link;
! @property (nonatomic, unsafe_unretained) NSString *src;
@end
2013年 6月 1日 土曜日
• メソッド 現在9つのメソッドがあります。
• -(NSArray *)synsetArrayWithString:(NSString *)synset;
-(NSArray *)wordsArrayWithWordID:(int)wordid;
-(NSArray *)senseArrayWithWordsArray:(NSArray *)words;
-(NSArray *)synLinksArrayWithSence:(Sense *)sense link:(NSString *)link;
-(NSArray *)senseArrayWithWords:(NSArray *)words;
-(NSArray *)wordsArrayWithLemma:(NSString *)lemma;
//
- (id) initWithPath:(NSString *)aPath;
//Synsetと言語で、Wordの配列を返します。
-(NSArray *)wordsOfSynset:(NSString *)synset language:(NSString *)lang;
//語を与えてsynset(同じ意味合いの語のグループ)を得ます。
-(NSArray *)synsetArrayWithLemma:(NSString *)lemma;
2013年 6月 1日 土曜日
• メソッド
//Synsetと言語で、Wordの配列を返します。
-(NSArray *)wordsOfSynset:(NSString *)synset language:
(NSString *)lang;
2013年 6月 1日 土曜日
• メソッド
//語を与えてsynsetの配列を得ます。
-(NSArray *)synsetArrayWithLemma:(NSString *)lemma;
2013年 6月 1日 土曜日
• 語を与えて、関連語セットを得る
• 「人間」->「人間」「人」...
2013年 6月 1日 土曜日
• このクラスをどのように使うか?
2013年 6月 1日 土曜日
WordNetJPN *wordnet = [[WordNetJPN alloc] initWithPath:path];
! //語を与えて関連語セットを返す
! NSArray *synsets = [wordnet synsetArrayWithLemma:searchString];
! for (Synset* synset in synsets) {
! ! NSArray *words1 = [wordnet wordsOfSynset:synset.synset
language:@"jpn"];
! ! for (Word *element in words1) {
! ! ! [searchStringArray addObject:element.lemma];
! ! }
! }
!
[searchStringArray addObject:searchString];
2013年 6月 1日 土曜日
• WordNetには、同義語だけではなく、上位
語・下位語といった関連性を持っています。
2013年 6月 1日 土曜日
• 上位語?下位語?
2013年 6月 1日 土曜日
• 生物
•  動物
•   ほ乳類
•    人間
生物
動物
ほ乳類
人間
2013年 6月 1日 土曜日
• たとえば、こんなことに使えるかも?
2013年 6月 1日 土曜日
• パン(bread)は食べられますか?
• 「パン」の上位語をたどっていくと「food」
にたどり着きます。
• つまり「パン」は「食品」である→食べられ
る。
2013年 6月 1日 土曜日
• フライパン(frying pan)は食べられますか?
• 「フライパン」の上位語をたどっていっても
什器(utensil)だけど、「food」はありません
でした。
• つまり「フライパン」は「食品」ではない→
食べられない。
2013年 6月 1日 土曜日
おまけ1
2013年 6月 1日 土曜日
• 検索する語によっては多くの関連語が返され
てくるので不要な関連語を除外する必要があ
ります。
2013年 6月 1日 土曜日
• Synsetの上位語を見て不要なSynsetは除外す
るとか。
2013年 6月 1日 土曜日
• 形態素解析して検索語を名詞・形容詞だけに
限定するとか
(サンプルにNSLinguisticTaggerでの形態素
解析コードを入れています。今回は品詞がと
れないので未使用。将来的には品詞情報は入
るかなと思う)
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン 検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都 市内 で 夜景 の きれいな イタリアン
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
で
夜景
の
きれいな
イタリアン
京都 市内 で 夜景 の きれいな イタリアン
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
で
夜景
の
きれいな
イタリアン
京都 市内 で 夜景 の きれいな イタリアン
名詞・形容詞のみ
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
夜景
きれいな
イタリアン
東京都 新宿区 の
京都 市内 で 唯一 の
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
夜景
きれいな
イタリアン
京都 市内 で 夜景 の きれいな イタリアン
東京都 新宿区 の
京都 市内 で 唯一 の
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
夜景
きれいな
イタリアン
京都 市内 で 夜景 の きれいな イタリアン
東京都 新宿区 の
京都 市内 で 唯一 の
検索
2013年 6月 1日 土曜日
形態素解析を使用
京都市内で夜景のきれいなイタリアン
京都
市内
夜景
きれいな
イタリアン
京都 市内 で 夜景 の きれいな イタリアン
東京都 新宿区 の
京都 市内 で 唯一 の
検索
2013年 6月 1日 土曜日
おまけ2
2013年 6月 1日 土曜日
• WordNetの辞書は、英語由来の概念辞書とい
うこともあり、日本固有の概念や固有名詞に
弱いという特徴があります。
2013年 6月 1日 土曜日
• ちょっと学術っぽい。
2013年 6月 1日 土曜日
• WordNetに追加して、独自の辞書を使わない
と実用には向かないかなと思います。
• そのような試みが、いろいろとなされていま
す。(論文調べてね)
2013年 6月 1日 土曜日
おまけ3
2013年 6月 1日 土曜日
• WordNetJPNクラスはWordNetのSQLiteデー
タベースにアクセスしています。
• CoreDataにお悩みの方はSQLite 3を直接使っ
てみたら?
2013年 6月 1日 土曜日
• ありがとうございました。
2013年 6月 1日 土曜日
• 関連用語
• Synset 同義語(synonym)のセット。その概
念を言い表す時に使われる語。→「にほん」
「にっぽん」は同義語である。
• lemma 語
2013年 6月 1日 土曜日
• synset
• 同じ意味を持つグループ
• pos
• 品詞
2013年 6月 1日 土曜日
• hype
上位語
• hypo
下位語
2013年 6月 1日 土曜日

More Related Content

PDF
hogefugaBattle(AndroidResetBattle)
PPTX
2014.07.06三都物語lt
PDF
Cocoa勉強会20140419ゲームをつくってみる
PDF
サーバサイドコース Sinatra + SPARQL 編
PDF
SPARQLでマッシュアップ -LOD活用のための技術紹介-
PDF
鬱くしい日本語のための形態素解析入門
KEY
スタート形態素解析
PDF
スペル修正プログラムの作り方 #pronama
hogefugaBattle(AndroidResetBattle)
2014.07.06三都物語lt
Cocoa勉強会20140419ゲームをつくってみる
サーバサイドコース Sinatra + SPARQL 編
SPARQLでマッシュアップ -LOD活用のための技術紹介-
鬱くしい日本語のための形態素解析入門
スタート形態素解析
スペル修正プログラムの作り方 #pronama

Similar to Word net cocoa勉強会201306 (20)

PDF
第17回Lucene/Solr勉強会 #SolrJP – Apache Lucene Solrによる形態素解析の課題とN-bestの提案
PDF
Lisp batton - Common LISP
PDF
やさしい日本語言い換えシステムを支える技術
PDF
textsearch_jaで全文検索
PDF
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
PDF
サブカルのためのWord2vec
PDF
ゆるいテキスト検索
PDF
ナイーブベイズによる言語判定
PPTX
資料
PPTX
類義語検索と類義語ハイライト
PDF
20150415 automatic retirieval_and_clustering_of_similar_words
PDF
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
PDF
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
PDF
Pgunconf ゆるいテキスト検索ふたたび - n-gram応用編
PDF
単語の分散表現と構成性の計算モデルの発展
PPTX
A Monolingual Tree-based Translation Model for Sentence Simplification
PDF
大規模常識知識ベース構築のための常識表現の自動獲得
PDF
WordNetで作ろう! 言語横断検索サービス
PDF
Introduction of tango! (jp)
PPTX
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
第17回Lucene/Solr勉強会 #SolrJP – Apache Lucene Solrによる形態素解析の課題とN-bestの提案
Lisp batton - Common LISP
やさしい日本語言い換えシステムを支える技術
textsearch_jaで全文検索
CluBERT: A Cluster-Based Approach for Learning Sense Distributions in Multipl...
サブカルのためのWord2vec
ゆるいテキスト検索
ナイーブベイズによる言語判定
資料
類義語検索と類義語ハイライト
20150415 automatic retirieval_and_clustering_of_similar_words
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
オントロジー検索エンジンを用いた領域オントロジー構築支援環境DODDLE-OWLの拡張
Pgunconf ゆるいテキスト検索ふたたび - n-gram応用編
単語の分散表現と構成性の計算モデルの発展
A Monolingual Tree-based Translation Model for Sentence Simplification
大規模常識知識ベース構築のための常識表現の自動獲得
WordNetで作ろう! 言語横断検索サービス
Introduction of tango! (jp)
COLING2014 読み会@小町研 “Morphological Analysis for Japanese Noisy Text Based on C...
Ad

More from Satoshi Oomori (8)

PDF
Cocoa勉強会20140621 macとiosで共通のコード
PDF
Scene kit cocoa勉強会201306
PDF
Cocoa勉強会ビギナーズramディスクとコマンドファイル
PPT
Cocoa勉強会201302
KEY
Cocoa勉強会201208
KEY
Cocoa勉強会関西2012年5月
KEY
Cocoa勉強会201203公開
PDF
Cocoa勉強会2011年11月
Cocoa勉強会20140621 macとiosで共通のコード
Scene kit cocoa勉強会201306
Cocoa勉強会ビギナーズramディスクとコマンドファイル
Cocoa勉強会201302
Cocoa勉強会201208
Cocoa勉強会関西2012年5月
Cocoa勉強会201203公開
Cocoa勉強会2011年11月
Ad

Word net cocoa勉強会201306