Ich habe ein Array wie dieses
%Vor%Mein Text befindet sich in dieser Variablen
%Vor%Ich möchte jedes Vorkommnis jedes Elements meines stopWords-Arrays im skalaren Ganztext vergleichen und durch Leerzeichen ersetzen.
Eine Möglichkeit, dies zu tun, ist wie folgt:
%Vor%Dies funktioniert und ersetzt jedes Auftreten aller Stoppwörter. Ich habe mich nur gefragt, ob es einen kürzeren Weg dafür gibt.
So:
%Vor%Das obige scheint nicht zu funktionieren.
Während die verschiedenen map
/ for
-basierten Lösungen funktionieren , führen sie auch die Regex-Verarbeitung Ihrer Zeichenfolge für jedes Stoppwort einzeln durch. Dies ist zwar im angegebenen Beispiel keine große Sache, kann jedoch zu erheblichen Leistungsproblemen führen, wenn der Zieltext und die Stoppwortliste anwachsen.
Jonathan Leffler und Robert P. sind mit ihren Vorschlägen, alle Stoppwörter zu einer einzigen Regex zusammenzufassen, auf dem richtigen Weg, aber eine einfache Prozentzahl aller Stoppwörter zu einer einzigen Alternation ist ein primitiver Ansatz und wird wieder Ineffizient, wenn die Stoppwortliste lang ist.
Geben Sie Regexp :: Assemble ein, wodurch Sie einen viel "schlaueren" Regex erstellen, der alle Probleme löst passt auf einmal zusammen - ich habe es mit Listen von bis zu 1700 Wörtern verwendet, die überprüft werden sollten:
%Vor%Welche Ausgaben:
%Vor%Was ist mit:
%Vor% Verketten Sie alle Wörter, um ' \b(and|the|it|...)\b
' zu bilden; Die Klammern um den Join sind notwendig, um ihm einen Listenkontext zu geben; ohne sie endet die Zählung der Wörter. Die Metazeichen " \b
" markieren Wortgrenzen und verhindern daher, dass Sie "Tausender" in "Tausender" ändern. Konvertiere das in einen zitierten regulären Ausdruck; Wenden Sie es global auf Ihre Betreffzeile an (so dass alle Vorkommen aller Stoppwörter in einem einzigen Vorgang entfernt werden).
Sie können auch auf die Variable ' $qr
' verzichten:
Ich glaube nicht, dass ich den Code von jemandem beibehalten möchte, der ohne die Variable ' $qrstring
' auskommt; es ist wahrscheinlich möglich, aber ich denke nicht, dass es gut lesbar wäre.
Tags und Links perl