Wolfram 语言

文本和语言处理

比较句子结构

两个句子的结构可以通过计算并处理其各自的成分图进行比较.

显示句子的树状成分图.

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]];

通过两个句子的距离矩阵比较其结构.

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

两个句子拥有相同的结构.

在两个不同维基百科文章中找出相同结构的句子. 首先,提取单词数相符的句子并生成每个句子的成分图.

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;

对不同文章的句子进行两两对比.

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 ja pt-br ru