Wolfram言語

テキストと言語の処理

文の構造を比較する

2つの文の構造は,それぞれの成分グラフを計算して処理することで,比べることができる.

文の成分木をグラフとして表示する.

In[1]:=
Click for copyable input
graph = TextStructure["Time flies like an arrow.", "ConstituentGraph"]
Out[1]=

グラフの全頂点間の距離の行列を計算する.

In[2]:=
Click for copyable input
distancemat1 = GraphDistanceMatrix[First[graph]]; MatrixForm[distancemat1]
Out[2]//MatrixForm=

もう一つの文についても同様にする.

In[3]:=
Click for copyable input
graph2 = TextStructure["I fly in the sky.", "ConstituentGraph"]; distancemat2 = GraphDistanceMatrix[First[graph2]];

2つの文の構造を,その距離行列を比較することで比較する.

In[4]:=
Click for copyable input
distancemat1 == distancemat2
Out[4]=

この2つの文の構造は等しい.

異なる2つのWikipediaの記事の中で構造が等しい文を求める.まず,指定された単語数の文を抽出し,それぞれの成分グラフを生成する.

In[5]:=
Click for copyable input
processWikiPage[article_] := Select[TextCases[WikipediaData[article], "Sentences"], WordCount[#] < 5 &]; genStructure[article_] := Flatten[TextStructure[#, "ConstituentGraph"] & /@ processWikiPage[article]];
In[6]:=
Click for copyable input
phrasestruct1 = genStructure["Philosophy"]; phrasestruct2 = genStructure["History"];

すべての距離行列を計算する.

In[7]:=
Click for copyable input
adj1 = GraphDistanceMatrix /@ phrasestruct1; adj2 = GraphDistanceMatrix /@ phrasestruct2;

異なる記事の文を2つずつ比較する.

In[8]:=
Click for copyable input
comparison = Outer[Equal, adj1, adj2, 1];

次は構造が等しい文である.

In[9]:=
Click for copyable input
pickedSentences = Flatten[Pick[Outer[List, phrasestruct1, phrasestruct2], comparison, True], 1];

次は最初のペアである.

In[10]:=
Click for copyable input
First[pickedSentences]
Out[10]=

関連する例

de en es fr pt-br ru zh