Welche Techniken / Tools gibt es für die Entdeckung allgemeine Phrasen in Textbrocken?

StackOverflow https://stackoverflow.com/questions/1426383

  •  07-07-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen ich 100000 E-Mail-Körper haben und 2000 von ihnen enthält eine abitrary gemeinsame Zeichenfolge wie „die schnelle braune Fuchs springt über den faulen Hund“ oder „Lorem ipsum dolor sit amet“. Welche Techniken könnte / sollte ich nutzen, um „mein“ diese Sätze? Ich bin nicht daran interessiert, einzelne Wörter oder kurze Sätze Bergbau. Auch muss ich Sätze, um herauszufiltern, die ich bereits kennen alle Mails auftreten.

Beispiel:

string mailbody1 = "Welcome to the world of tomorrow! This is the first mail body. Lorem ipsum dolor sit AMET. Have a nice day dude. Cya!";
string mailbody2 = "Welcome to the world of yesterday! Lorem ipsum dolor sit amet Please note this is the body of the second mail. Have a nice day.";
string mailbody3 = "A completely different body.";
string[] mailbodies = new[] {mailbody1, mailbody2, mailbody3};
string[] ignoredPhrases = new[] {"Welcome to the world of"};

string[] results = DiscoverPhrases(mailbodies, ignoredPhrases);

In diesem Beispiel möchte ich die DiscoverPhrases zurückkehren funktionieren „Lorem ipsum dolor sit amet“ und „einen schönen Tag“. Es ist nicht so wichtig, wenn die Funktion auch kürzer „Rauschen“ Phrasen zurück, aber wenn sie möglich wäre es schön diese im Prozess zu vermeiden.

Edit:. Ich habe vergessen mailbody3 im Beispiel enthalten

War es hilfreich?

Lösung

Hier finden Sie aktuelle N -grams . Die häufigsten Sätze zwangsläufig dazu beitragen, die häufigsten N -grams. Ich würde mit Wort trigrams beginnen und sehen, wohin das führt. (Platzbedarf ist N mal die Länge des Textes, so dass Sie nicht lassen können N zu groß werden.) Wenn Sie die Positionen speichern und nicht nur eine Zählung, Sie kann dann sehen, ob die trigrams allgemeine Phrasen zu bilden, erweitert werden kann.

Andere Tipps

Ich bin mir nicht sicher, ob das, was Sie wollen, aber überprüfe längste gemeinsame Teilzeichen Problem und diff Algorithmen.

So etwas wie dies funktionieren könnte, je nachdem, ob Sie über Wortgrenzen kümmern. In Pseudo-Code (zur Berechnung der Längste gemeinsame Subsequence wo LCS eine Funktion ist):

someMinimumLengthParameter = 20;
foundPhrases = [];

do {
    lcs = LCS(mailbodies);
    if (lcs in ignoredPhrases) continue;

    foundPhrases += lcs;

    for body in mailbodies {
        body.remove(lcs);
    }    
} while(lcs.length > someMinimumLengthParameter);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top