比较句子结构
两个句子的结构可以通过计算并处理其各自的成分图进行比较.
显示句子的树状成分图.
In[1]:=
graph = TextStructure["Time flies like an arrow.", "ConstituentGraph"]
Out[1]=
计算该图所有节点间的距离矩阵.
In[2]:=
distancemat1 = GraphDistanceMatrix[First[graph]];
MatrixForm[distancemat1]
Out[2]//MatrixForm=
对另一个句子进行同样处理.
In[3]:=
graph2 = TextStructure["I fly in the sky.", "ConstituentGraph"];
distancemat2 = GraphDistanceMatrix[First[graph2]];
通过两个句子的距离矩阵比较其结构.
In[4]:=
distancemat1 == distancemat2
Out[4]=
两个句子拥有相同的结构.
在两个不同维基百科文章中找出相同结构的句子. 首先,提取单词数相符的句子并生成每个句子的成分图.
In[5]:=
processWikiPage[article_] :=
Select[TextCases[WikipediaData[article], "Sentences"],
WordCount[#] < 5 &];
genStructure[article_] :=
Flatten[TextStructure[#, "ConstituentGraph"] & /@
processWikiPage[article]];
In[6]:=
phrasestruct1 = genStructure["Philosophy"];
phrasestruct2 = genStructure["History"];
计算所有距离矩阵.
In[7]:=
adj1 = GraphDistanceMatrix /@ phrasestruct1;
adj2 = GraphDistanceMatrix /@ phrasestruct2;
对不同文章的句子进行两两对比.
In[8]:=
comparison = Outer[Equal, adj1, adj2, 1];
这里是一对结构相同的句子.
In[9]:=
pickedSentences =
Flatten[Pick[Outer[List, phrasestruct1, phrasestruct2], comparison,
True], 1];
以下为第一组.
In[10]:=
First[pickedSentences]
Out[10]=