Compare the Structure of Sentences
The structure of two sentences can be compared by computing and processing their respective constituent graphs.
Display the constituent tree of a sentence as a graph.
In[1]:=
graph = TextStructure["Time flies like an arrow.", "ConstituentGraph"]
Out[1]=
Compute the matrix of distances between all the vertices of this graph.
In[2]:=
distancemat1 = GraphDistanceMatrix[First[graph]];
MatrixForm[distancemat1]
Out[2]//MatrixForm=
Proceed similarly for another sentence.
In[3]:=
graph2 = TextStructure["I fly in the sky.", "ConstituentGraph"];
distancemat2 = GraphDistanceMatrix[First[graph2]];
Compare the structure of the two sentences by comparing their distance matrices.
In[4]:=
distancemat1 == distancemat2
Out[4]=
The two sentences have the same structure.
Find sentences with identical structures in two different Wikipedia articles. First, extract sentences with a given word count and generate the constituent graph for each of them.
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"];
Compute all distance matrices.
In[7]:=
adj1 = GraphDistanceMatrix /@ phrasestruct1;
adj2 = GraphDistanceMatrix /@ phrasestruct2;
Compare the sentences of the different articles two by two.
In[8]:=
comparison = Outer[Equal, adj1, adj2, 1];
These are the pairs of sentences with the same structure.
In[9]:=
pickedSentences =
Flatten[Pick[Outer[List, phrasestruct1, phrasestruct2], comparison,
True], 1];
This is the first pair.
In[10]:=
First[pickedSentences]
Out[10]=