Aus Ihrer Klarstellung -
Nehmen wir einfach an, dass es nach Datenbank eine große Liste des ngram-Modells gibt, das das Dokument darstellt
Sie sollten etwas strukturierteres tun und die Daten in eine relationale Datenbank stellen. Auf diese Weise können Sie einfacher und schneller detailliertere Analysen durchführen.
Ich denke, wenn Sie "ngram" sagen, meinen Sie "1gram". Sie können die Analyse auf Wunsch um 2 Gramm, 3 Gramm usw. erweitern.
Ich hätte eine Tabellenstruktur, die ungefähr so aussieht -
1 Gramm
ID-
Wert
Docs
ID
DocTitle
DocAuthor
usw.
Docs1Grams
1GramID
DocID
1GramCount
Wenn also in der Aufzeichnung in der Docs1Grams- Tabelle 1GramID auf 1 Gramm "the" und DocID auf das Dokument "War and Peace" zeigt, enthält 1GramCount die Häufigkeit, mit der 1 Gramm "the" in War and Peace angezeigt wird.
Wenn die DocID für "Krieg und Frieden" 1 und die DocId für "Herr der Ringe" 2 ist, würden Sie diese Abfrage durchführen, um die 1-Gramm-Ähnlichkeitsbewertung für diese beiden Dokumente zu berechnen.
Select count(*) from Docs1Grams D1, Docs1Grams D2
where D1.DocID = 1 and
D2.DocID = 2 and
D1.1GramID = D2.1GramID and
D1.1GramCount > 0 and
D2.1GramCount > 0
Durch Verallgemeinern und Erweitern der Abfrage kann dies leicht geändert werden, um automatisch die höchste Punktzahl / Anzahl auszuwählen und das ausgewählte Dokument mit allen anderen zu vergleichen.
Durch Ändern / Erweitern des D1.1GramCount > 0 and D2.1GramCount > 0
Teils der Abfrage können Sie den Vergleich leicht verfeinern, indem Sie beispielsweise 2 Gramm, 3 Gramm usw. hinzufügen oder die einfache Übereinstimmung ändern, um entsprechend der prozentualen Übereinstimmung pro Gramm zu punkten.
Wenn in Ihrem Betreff-Dokument 0,0009% der 1 Gramm "das" sind, Dokument 1 0,001% und Dokument 2 0,0015%, würde Dokument 1 bei "dem" eine höhere Punktzahl erzielen, da der Modul der Differenz (oder ein anderes von Ihnen gewähltes Maß) zu verwenden) ist kleiner.