Extrahieren Sie kanonische Zeichenfolgen aus einer Liste von lauten Zeichenfolgen


10

Ich habe Tausende von Listen mit Zeichenfolgen, und jede Liste enthält ungefähr 10 Zeichenfolgen. Die meisten Zeichenfolgen in einer bestimmten Liste sind sehr ähnlich, obwohl einige Zeichenfolgen (selten) völlig unabhängig von den anderen sind und einige Zeichenfolgen irrelevante Wörter enthalten. Sie können als verrauschte Variationen einer kanonischen Saite betrachtet werden. Ich suche einen Algorithmus oder eine Bibliothek, die jede Liste in diese kanonische Zeichenfolge konvertiert.

Hier ist eine solche Liste.

  • Star Wars: Episode IV Eine neue Hoffnung | StarWars.com
  • Star Wars Episode IV - Eine neue Hoffnung (1977)
  • Star Wars: Episode IV - Eine neue Hoffnung - faule Tomaten
  • Sieh dir Star Wars: Episode IV - Eine neue Hoffnung online kostenlos an
  • Star Wars (1977) - Größte Filme
  • [REC] 4 Poster verspricht Tod durch Außenbordmotor - SciFiNow

Für diese Liste wäre jede Zeichenfolge ^Star Wars:? Episode IV (- )?A New Hope$akzeptabel, die mit dem regulären Ausdruck übereinstimmt .

Ich habe mir Andrew Ngs Kurs über maschinelles Lernen auf Coursera angesehen, aber ich konnte kein ähnliches Problem finden.


2
PS Ich denke, der Begriff, den Sie suchen, ist "kanonisch"
Sean Owen

Ist die "wahrscheinlichste" / "einvernehmlichste" Zeichenfolge, die Sie identifizieren möchten, ein regulärer Ausdruck? Oder eine der Zeichenfolgen auf der Liste?
MrMeritology

@ MrMeritology Ich suche keinen regulären Ausdruck. Ich habe in meiner Frage einen regulären Ausdruck gezeigt, um zu veranschaulichen, wie flexibel ich in der Art von Zeichenfolgen bin, die ich für richtig halten würde.
Lacton

OKAY. Dann sollte die Antwort, die ich unten gegeben habe, für Sie funktionieren.
MrMeritology

Würde dies unter NER (Named Entity Recognition) fallen?
Hippietrail

Antworten:


4

Als naive Lösung würde ich vorschlagen, zuerst die Zeichenfolgen auszuwählen, die die häufigsten Token in der Liste enthalten. Auf diese Weise können Sie irrelevante Zeichenfolgen entfernen.

Im zweiten Satz würde ich mit der Mehrheit abstimmen. Angenommen, die 3 Sätze:

  • Star Wars: Episode IV Eine neue Hoffnung | StarWars.com
  • Star Wars Episode IV - Eine neue Hoffnung (1977)
  • Star Wars: Episode IV - Eine neue Hoffnung - faule Tomaten

Ich würde die Token einzeln durchgehen. Wir beginnen mit "Star". Es gewinnt, wenn alle Zeichenfolgen damit beginnen. "Wars" wird auch gewinnen. Der nächste ist ":". Es wird auch gewinnen.

Alle Token werden bis "Hope" mehrheitlich gewählt. Das nächste Zeichen nach "Hoffnung" ist entweder "|" oder "(" oder "-". Keiner von ihnen wird bei der Mehrheitswahl gewinnen, also werde ich hier aufhören!

Eine andere Lösung wäre wahrscheinlich die Verwendung der längsten gemeinsamen Teilsequenz .

Wie gesagt ich habe nicht viel darüber nachgedacht. Es könnte also viel bessere Lösungen für Ihr Problem geben :-)


3

Berechnen Sie zuerst den Bearbeitungsabstand zwischen allen Zeichenfolgenpaaren. Siehe http://en.wikipedia.org/wiki/Edit_distance und http://web.stanford.edu/class/cs124/lec/med.pdf . Schließen Sie dann alle Ausreißerzeichenfolgen aus, die auf einem bestimmten Abstandsschwellenwert basieren.

Mit den verbleibenden Zeichenfolgen können Sie die Abstandsmatrix verwenden, um die zentralste Zeichenfolge zu identifizieren. Abhängig von der verwendeten Methode erhalten Sie möglicherweise für einige Daten mehrdeutige Ergebnisse. Keine Methode ist perfekt für alle Möglichkeiten. Für Ihre Zwecke benötigen Sie lediglich einige heuristische Regeln, um Unklarheiten zu beseitigen - dh wählen Sie zwei oder mehr Kandidaten aus.

Vielleicht möchten Sie nicht "am zentralsten" aus Ihrer Liste der Zeichenfolgen auswählen, sondern stattdessen einen regulären Ausdruck generieren, der das Muster erfasst, das allen Nicht-Ausreißer-Zeichenfolgen gemeinsam ist. Eine Möglichkeit, dies zu tun, besteht darin, eine Zeichenfolge zu synthetisieren, die von allen Nicht-Ausreißer-Zeichenfolgen gleich weit entfernt ist. Sie können den erforderlichen Bearbeitungsabstand von der Matrix berechnen und dann zufällig regelmäßig generieren, indem Sie diese Abstände als Einschränkungen verwenden. Dann würden Sie reguläre Ausdrücke von Kandidaten testen und den ersten akzeptieren, der den Einschränkungen entspricht, und auch alle Zeichenfolgen in Ihrer Nicht-Ausreißer-Liste akzeptieren. (Erstellen Sie reguläre Ausdrücke aus den längsten allgemeinen Teilzeichenfolgenlisten, da dies keine Platzhalterzeichen sind.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.