2009-03-31 15 views
0

Meine Website hat viele dynamische Statistiken mit Namen von Personen, Orten und Themen, die alle ihre eigenen Seiten haben. Ich möchte jede dieser Seiten automatisch mit ihrer Seite verknüpfen, basierend auf Daten, die ich in einer MySQL-Datenbank mit "Wörtern" und "Links" eingerichtet habe.Verknüpfen Sie automatisch Schlüsselwörter innerhalb der Seiten Texte aus der Wortliste

Was wäre eine effiziente Möglichkeit, 20-50 Vorkommen von potenziell 15-20.000 Schlüsselwörtern und Links automatisch zu verknüpfen? Ich benutze MySQL und PHP.

Here's a similar query for C++

Antwort

1

Im Allgemeinen möchten Sie diese Art von Link-Suche so selten wie möglich durchführen, da es keinen besonders effizienten Weg gibt, dies zu tun. Sie haben nicht angegeben, welche Art von Daten Ihre Website hat, aber ich gehe davon aus, dass es sich dabei um ein Wiki oder einen Blog handelt. Ich werde über diese Art von Funktionalität sprechen, wie es für ein Wiki wäre, aber ein ähnlicher Ansatz würde für alles funktionieren.

Mit einem Wiki möchten Sie nur die Link-Suche durchführen, wenn eine Seite geändert (oder an erster Stelle gesendet) wird. Beachten Sie, dass Links auf zwei verschiedene Arten verarbeitet werden müssen. Wenn eine Seite erstellt oder bearbeitet wird, müssen Sie zunächst den Text dieser Seite durchsuchen, um festzustellen, welche Links darin enthalten sein sollen. Zweitens: Wenn eine Seite erstellt, umbenannt oder gelöscht wird, müssen Sie (zusätzlich zur Suche dieser Seite im Fall der Erstellung) alle anderen Seiten durchsuchen, um Links nach Bedarf hinzuzufügen/zu aktualisieren/zu entfernen. Es gibt einige Möglichkeiten, wie diese Links gespeichert werden können.

Eine Option besteht darin, zwei "Versionen" des Textes jeder Seite in der Datenbank zu behalten. Eine Version ist die ursprüngliche "Markup" -Version, das ist was Sie tatsächlich eingegeben haben und was angezeigt wird, wenn Sie die Seite bearbeiten. Die zweite Version ist die geparste/verarbeitete "Anzeige" -Version. Dies sind die Daten, die verwendet werden, um die Seite für normale Zuschauer anzuzeigen.

Zum Beispiel, wenn Ihr Wiki-Markup für bold ** ist, die "Markup-Version" hat **bold text** und die "Anzeigeversion" hat <strong>bold text</strong>. Dies macht es so, dass Sie Ihr Markup nicht auf jeder Seitenansicht verarbeiten müssen.

Dieser Ansatz wird auf Seitenverknüpfungen angewendet, indem der gesendete Text nach Wörtern durchsucht wird, die verknüpft werden sollen, und diese Links in die "Anzeigeversion" eingefügt werden. Wenn beispielsweise eine Seite übergeben wird, durchlaufen Sie jedes Wort im Text der Seite und vergleichen es mit einer Liste von "Linkwörtern" (stellen Sie sicher, dass diese Liste zwischengespeichert ist und Sie keine Datenbankabfrage durchführen möchten für jedes Wort). Dies kann ziemlich effizient gemacht werden, indem die potentiellen Verknüpfungswörter als Schlüssel in einem Hash gespeichert werden. Befindet sich das zu testende Wort in der Liste "Verknüpfungswort", fügen Sie beim Kopieren in den Text "Anzeigeversion" einen Link auf die entsprechende Seite um das Wort ein. Wenn nicht, schreiben Sie einfach das Wort genau so, wie es in der "Markup-Version" war.

Es gibt ein paar andere Möglichkeiten, wie dies zu implementieren ist, aber das ist ziemlich einfach. Ich werde Sie damit für jetzt verlassen, aber wenn Sie möchten, dass ich eine der anderen Optionen beschreibe, lassen Sie es mich in einem Kommentar wissen und ich werde es bearbeiten.

+0

Klingt wie eine gute Option, interessiert sich für andere, die Sie haben könnten. Wenn ich einen csv von Schlüsselwörtern/Verbindungen habe, wie kann das in einen "Hasch" gemacht werden? Mein Hauptanliegen war, die ursprünglichen Daten nicht zu ändern, aber die Erstellung alternativer Versionen könnte funktionieren. –

0

PHP wrapper für die Snowball vielleicht?

+0

Ich würde sagen, das ist mehr um Wortpaare oder Ähnlichkeiten zu haben - ich habe bereits eine Wortliste definiert und muss das Vorkommen von jedem innerhalb des Textes finden. –

Verwandte Themen