Interessantes Tool für Textanalyse und NLP

Teilen auf Facebook
Teilen auf twittern
Teilen auf verlinktin
Teilen auf Telegramm
Teilen auf WhatsApp

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

Einführung

Es gibt viele Möglichkeiten, Text in Python zu vergleichen. Aber trotzdem, Wir suchen oft nach einer einfachen Möglichkeit, Text zu vergleichen. Der Textvergleich ist für verschiedene Zwecke der Textanalyse und der Verarbeitung natürlicher Sprache erforderlich.

Eine der einfachsten Möglichkeiten zum Vergleichen von Text in Python ist die Verwendung der Fuzzy-Wuzzy-Bibliothek. Hier, Wir bekommen eine Punktzahl von 100, nach der Ähnlichkeit der Ketten. Grundsätzlich, wir erhalten den Ähnlichkeitsindex. Die Bibliothek verwendet den Levenshtein-Abstand, um die Differenz zwischen zwei Strings zu berechnen.

88249pexels-pixabay-261763-9063654
Bildquelle: https://www.pexels.com/

Levenshtein-Distanz

Die Levenshtein-Distanz ist eine String-Metrik zur Berechnung der Differenz zwischen zwei verschiedenen Strings. Der sowjetische Mathematiker Vladimir Levenshtein hat diese Methode formuliert und ist nach ihm benannt..

Der Levenshtein-Abstand zwischen zwei Saiten ein, B (der Länge {| ein | Ja | B | beziehungsweise) Wird gegeben von lev (ein, B) wo

47459fw-1631496

Wo ist er Cola von einem Seil x ist eine Zeichenfolge von allen außer dem ersten Zeichen von x, Ja x[n] ist er NordenNS Zeichenfolge x beginnend mit dem Charakter 0.

(Quelle: https://en.wikipedia.org/wiki/Levenshtein_distance)

Durcheinander

Fuzzy Wuzzy ist eine Open-Source-Bibliothek, die von SeatGeek entwickelt und veröffentlicht wurde. Sie können seinen ursprünglichen Blog lesen hier. Einfache Implementierung und einzigartiges Scoring (Über 100) metic machen den Einsatz von FuzzyWuzzy zum Textvergleich interessant und haben zahlreiche Anwendungsmöglichkeiten.

Installation:

pip installieren fuzzywuzzy
pip install python-Levenshtein

Dies sind die Anforderungen, die installiert werden müssen.

Beginnen wir nun mit dem Code, indem wir die notwendigen Bibliotheken importieren.

aus Fuzzywuzzy-Import Flaum
aus Fuzzywuzzy-Import Prozess

Notwendige Importe werden getätigt.

#String-Vergleich

#genau gleicher Text
Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis('London ist eine große Stadt.', 'London ist eine große Stadt.')

Abfahrt: 100

Da die beiden Saiten hier genau gleich sind, wir bekommen das ergebnis 100, zeigt identische Zeichenfolgen an.

#String-Vergleich

#nicht gleicher Text
Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis('London ist eine große Stadt.', 'London ist eine sehr große Stadt.')

Abfahrt: 89

Wie die Saiten jetzt anders sind, die Punktzahl ist 89. Dann, Wir sehen unscharfe, verschwommene Arbeit.

#Jetzt lass uns die Fälle umwandeln

a1 = "Python-Programm"
a2 = "PYTHON-PROGRAMM"
Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(a1.untere(),a2.untere())
drucken(Verhältnis)

Abfahrt: 100

Hier, in diesem Fall, obwohl die beiden verschiedenen Ketten unterschiedliche Fälle hatten, beide wurden in Kleinbuchstaben umgewandelt und die Punktzahl war 100.

Teilstring-Übereinstimmung

Jetzt, oft können mehrere Textübereinstimmungsfälle auftreten, in denen wir zwei verschiedene Zeichenfolgen vergleichen müssen, wobei eine eine Teilzeichenfolge der anderen sein könnte. Zum Beispiel, Wir testen eine Textzusammenfassung und müssen überprüfen, wie gut sie funktioniert. Dann, der zusammengefasste Text ist ein Teilstring des Originalstrings. FuzzyWuzzy verfügt über leistungsstarke Funktionen, um mit diesen Fällen umzugehen.

#Fuzzywuzzy-Funktionen zum Arbeiten mit Teilstring-Matching

b1 = "Die Samsung Group ist ein südkoreanischer multinationaler Mischkonzern mit Hauptsitz in Samsung Town, Seoul."
b2 = "Samsung Group ist ein südkoreanisches Unternehmen mit Sitz in Seoul"

Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(b1.untere(),b2.untere())
Partial_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.partial_ratio'}, '*')">partielles_verhältnis(b1.untere(),b2.untere())

drucken("Verhältnis:",Verhältnis)
drucken("Teilverhältnis:",Partial_Ratio)

Produktion:

Verhältnis: 64
Teilverhältnis: 74

Hier, Wir können sehen, dass die Punktzahl für die Funktion Teilgrund höher ist. Dies zeigt an, dass es in der Lage ist zu erkennen, dass die Zeichenfolge b2 hat Worte von b1.

Token-Ranking-Verhältnis

Aber die obige Methode zum Vergleich von Teilzeichenfolgen ist nicht narrensicher. Häufig, die Wörter sind gemischt und folgen keiner Reihenfolge. Ähnlich, bei ähnlichen Sätzen, Wortstellung ist unterschiedlich oder gemischt. In diesem Fall, wir verwenden eine andere funktion.

c1 = "Samsung Galaxy-Smartphone"
c2 =  "Smartphone Samsung Galaxy"
Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(c1.untere(),c2.untere())
Partial_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.partial_ratio'}, '*')">partielles_verhältnis(c1.untere(),c2.untere())
Token_Sort_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_sort_ratio'}, '*')">token_sort_ratio(c1.untere(),c2.untere())
drucken("Verhältnis:",Verhältnis)
drucken("Teilverhältnis:",Partial_Ratio)
drucken("Token-Sortierverhältnis:",Token_Sort_Ratio)

Produktion:

Verhältnis: 56
Teilverhältnis: 60
Token-Sortierverhältnis: 100

Dann, hier, in diesem Fall, Wir können sehen, dass die Saiten nur gemischte Versionen voneinander sind. Und die beiden Strings zeigen das gleiche Gefühl und erwähnen auch die gleiche Entität. Die Standard-Fuzz-Funktion zeigt, dass die Punktzahl zwischen ihnen ist 56. Und die Funktion Token Sort Ratio zeigt, dass die Ähnlichkeit 100.

Dann, Es ist klar, dass in einigen Situationen oder Anwendungen, der Token-Ranking-Index wird nützlicher sein.

Token-Satzverhältnis

Aber, jetzt wenn die beiden Saiten unterschiedliche Längen haben. Funktionen für Token-Klassifizierungsbeziehungen funktionieren in dieser Situation möglicherweise nicht gut. Dafür, wir haben die Token Set Ratio-Funktion.

d1 = "Windows wird von der Microsoft Corporation entwickelt"
d2 = "Microsoft Windows"


Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(d1.untere(),d2.untere())
Partial_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.partial_ratio'}, '*')">partielles_verhältnis(d1.untere(),d2.untere())
Token_Sort_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_sort_ratio'}, '*')">token_sort_ratio(d1.untere(),d2.untere())
Token_Set_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_set_ratio'}, '*')">token_set_ratio(d1.untere(),d2.untere())
drucken("Verhältnis:",Verhältnis)
drucken("Teilverhältnis:",Partial_Ratio)
drucken("Token-Sortierverhältnis:",Token_Sort_Ratio)
drucken("Token-Satz-Verhältnis:",Token_Set_Ratio)

Produktion:

Verhältnis: 41
Teilverhältnis: 65
Token-Sortierverhältnis: 59
Token-Satz-Verhältnis: 100

Ah! Die Punktzahl von 100. Gut, Der Grund ist, dass die Kette d2 die Komponenten sind vollständig in der Kette vorhanden d1.

Jetzt, Lassen Sie uns die Zeichenfolge d2 . leicht modifizieren.

d1 = "Windows wird von der Microsoft Corporation entwickelt"
d2 = "Microsoft Windows 10"


Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(d1.untere(),d2.untere())
Partial_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.partial_ratio'}, '*')">partielles_verhältnis(d1.untere(),d2.untere())
Token_Sort_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_sort_ratio'}, '*')">token_sort_ratio(d1.untere(),d2.untere())
Token_Set_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_set_ratio'}, '*')">token_set_ratio(d1.untere(),d2.untere())
drucken("Verhältnis:",Verhältnis)
drucken("Teilverhältnis:",Partial_Ratio)
drucken("Token-Sortierverhältnis:",Token_Sort_Ratio)
drucken("Token-Satz-Verhältnis:",Token_Set_Ratio)

Von, den Text leicht ändern d2 Wir können sehen, dass die Punktzahl auf reduziert wird 92. Dies liegt daran, dass der Text „10“Nicht in der Kette vorhanden d1.

WRatio ()

Diese Funktion hilft bei der Verwaltung der Groß-/Kleinschreibung, Kleinbuchstaben und einige andere Parameter.

#fuzz.WRatio()

drucken("Leichte Änderung der Fälle:",Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.WRatio'}, '*')">WRatio('Ferrari LaFerrari', 'FerrarI LAFerrari'))

Produktion:

Leichte Änderung der Fälle: 100

Versuchen wir, ein Leerzeichen zu entfernen.

#fuzz.WRatio()

drucken("Leichte Änderung der Fälle und ein Leerzeichen entfernt:",Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.WRatio'}, '*')">WRatio('Ferrari LaFerrari', 'FerrarILAFerrari'))

Produktion:

Leichte Änderung der Fälle und ein Leerzeichen entfernt: 97

Versuchen wir es mit Satzzeichen.

#Umgang mit einigen zufälligen Satzzeichen
g1='Microsoft Windows ist gut, aber nimmt viel von ram auf!!!'
g2='Microsoft Windows ist gut, verbraucht aber viel RAM?'
drucken(Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.WRatio'}, '*')">WRatio(g1,g2 ))

Abfahrt: 99

Deswegen, Wir können sehen, dass FuzzyWuzzy viele coole Funktionen hat, die verwendet werden können, um coole Textvergleichsaufgaben durchzuführen.

Einige geeignete Anwendungen:

FuzzyWuzzy kann einige coole Anwendungen haben.

Kann verwendet werden, um längere Textzusammenfassungen zu bewerten und ihre Ähnlichkeit zu beurteilen. Dies kann verwendet werden, um die Leistung von Textzusammenfassungen zu messen.

Nach der Ähnlichkeit der Texte, kann auch verwendet werden, um die Authentizität eines Textes zu identifizieren, Artikel, Nachrichten, Buchen, etc. Häufig, wir finden mehrere Texte / falsche Daten. Häufig, Es ist nicht möglich, alle Textdaten zu überprüfen. Textähnlichkeit verwenden, Abgleich mehrerer Texte möglich.

FuzzyWuzzy kann auch nützlich sein, um den ähnlichsten Text aus mehreren Texten auszuwählen. Dann, Die Anwendungen von FuzzyWuzzy sind zahlreich.

Textähnlichkeit ist eine wichtige Metrik, die für verschiedene NLP- und Textanalysezwecke verwendet werden kann.. Das Interessante an FuzzyWuzzy ist, dass die Ähnlichkeiten mit einer Punktzahl von angegeben werden 100. Dies ermöglicht eine relative Bewertung und generiert auch ein neues Merkmal / Daten, die für Analysezwecke verwendet werden können / ML.

Zusammenfassung Ähnlichkeit:

#Verwendung von Fuzzy Wuzzy
#zusammenfassung ähnlichkeit

Eingabetext="Text Analytics beinhaltet die Verwendung von unstrukturierten Textdaten, Verarbeitung zu nutzbaren strukturierten Daten. Text Analytics ist eine interessante Anwendung der Natural Language Processing. Text Analytics verfügt über verschiedene Prozesse, einschließlich der Bereinigung von Text, Stoppwörter entfernen, Berechnung der Worthäufigkeit, und vieles mehr. Text Analytics hat heutzutage stark an Bedeutung gewonnen. Da sich Millionen von Menschen auf Online-Plattformen engagieren und miteinander kommunizieren, eine große Menge an Textdaten wird generiert. Textdaten können Blogs sein, Social-Media-Beiträge, twittert, Produktrezensionen, Umfragen, Forumsdiskussionen, und vieles mehr. Solche riesigen Datenmengen erzeugen riesige Textdaten, die von Organisationen verwendet werden können. Die meisten verfügbaren Textdaten sind unstrukturiert und verstreut. Textanalyse wird verwendet, um diese riesige Menge an Informationen zu sammeln und zu verarbeiten, um Erkenntnisse zu gewinnen. Textanalyse dient als Grundlage für viele fortgeschrittene NLP-Aufgaben wie die Klassifizierung, Kategorisierung, Stimmungsanalyse, und vieles mehr. Text Analytics wird verwendet, um Muster und Trends in Textdaten zu verstehen. Schlüsselwörter, Themen, und wichtige Funktionen von Text werden mithilfe von Text Analytics gefunden. Es gibt noch viele weitere interessante Aspekte von Text Analytics, Lassen Sie uns nun mit unserem Lebenslauf-Datensatz fortfahren. Der Datensatz enthält Text aus verschiedenen Lebenslauftypen und kann verwendet werden, um zu verstehen, was Menschen hauptsächlich in Lebensläufen verwenden. Resume Text Analytics wird häufig von Recruitern verwendet, um das Profil von Bewerbern zu verstehen und Bewerbungen zu filtern. Die Rekrutierung für Jobs ist heutzutage eine schwierige Aufgabe geworden, mit vielen Bewerbern für Stellen. Führungskräfte der Personalabteilung verwenden häufig verschiedene Tools zur Textverarbeitung und zum Lesen von Dateien, um die gesendeten Lebensläufe zu verstehen. Hier, wir arbeiten mit einem Beispieldatensatz für den Lebenslauf, die den Lebenslauftext und die Lebenslaufkategorie enthält. Wir werden die Daten lesen, Bereinigen Sie es und versuchen Sie, einige Erkenntnisse aus den Daten zu gewinnen."

Das obige ist der Originaltext.

Ausgabetext="Text Analytics beinhaltet die Verwendung von unstrukturierten Textdaten, Verarbeitung zu nutzbaren strukturierten Daten. Text Analytics ist eine interessante Anwendung der Natural Language Processing. Text Analytics verfügt über verschiedene Prozesse, einschließlich der Bereinigung von Text, Stoppwörter entfernen, Berechnung der Worthäufigkeit, und vieles mehr. Text Analytics wird verwendet, um Muster und Trends in Textdaten zu verstehen. Schlüsselwörter, Themen, und wichtige Funktionen von Text werden mithilfe von Text Analytics gefunden. Es gibt noch viele weitere interessante Aspekte von Text Analytics, Lassen Sie uns nun mit unserem Lebenslauf-Datensatz fortfahren. Der Datensatz enthält Text aus verschiedenen Lebenslauftypen und kann verwendet werden, um zu verstehen, was Menschen hauptsächlich in Lebensläufen verwenden."
Verhältnis = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.Verhältnis'}, '*')">Verhältnis(Eingabetext.untere(),Ausgabetext.untere())
Partial_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.partial_ratio'}, '*')">partielles_verhältnis(Eingabetext.untere(),Ausgabetext.untere())
Token_Sort_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_sort_ratio'}, '*')">token_sort_ratio(Eingabetext.untere(),Ausgabetext.untere())
Token_Set_Ratio = Flaum.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.fuzz.token_set_ratio'}, '*')">token_set_ratio(Eingabetext.untere(),Ausgabetext.untere())

drucken("Verhältnis:",Verhältnis)
drucken("Teilverhältnis:",Partial_Ratio)
drucken("Token-Sortierverhältnis:",Token_Sort_Ratio)
drucken("Token-Satz-Verhältnis:",Token_Set_Ratio)

Produktion:

Verhältnis: 54
Teilverhältnis: 79
Token-Sortierverhältnis: 54
Token-Satz-Verhältnis: 100

Wir können die verschiedenen Punktzahlen sehen. Die Teilbeziehung zeigt, dass sie ziemlich ähnlich sind, was soll der fall sein. Was ist mehr, der Anteil des Tokensatzes ist 100, was offensichtlich ist, da die Zusammenfassung vollständig dem Originaltext entnommen ist.

Bestmöglicher String-Match:

Lassen Sie uns die Prozessbibliothek verwenden, um die bestmögliche String-Übereinstimmung zwischen einer Liste von Strings zu finden.

#Auswahl des möglichen String-Matches

#Prozessbibliothek verwenden

Anfrage = 'Stapelüberlauf'

Entscheidungen = ['Bestands-Overhead', 'Stapel überläuft', 'S. Überlauf',"Stocküberlauf"] 

drucken("Liste der Verhältnisse: ")

drucken(Prozess.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.process.extract'}, '*')">Extrakt(Anfrage, Entscheidungen))

drucken("Beste Wahl: ",Prozess.<ein onclick="parent.postMessage({'Referent':'.fuzzywuzzy.process.extractOne'}, '*')">ExtractOne(Anfrage, Entscheidungen))

Produktion:

Liste der Verhältnisse: 
[('Stock-Überlauf', 97), ('Stapel überläuft', 90), ('S. Überlauf', 85), ('Bestands-Overhead', 64)]
Beste Wahl:  ('Stock-Überlauf', 97)

Deswegen, Ähnlichkeitsbewertungen und beste Übereinstimmung werden angegeben.

Letzte Worte

Die FuzzyWuzzy-Bibliothek baut auf der difflib-Bibliothek auf. Und Python-Levenshtein wurde verwendet, um die Geschwindigkeit zu optimieren. Wir können also verstehen, dass FuzzyWuzzy eine der besten Möglichkeiten ist, Strings in Python zu vergleichen.

Überprüfen Sie den Code in Kaggle hier.

Über mich:

Prateek Majumder

Datenwissenschaft und Analytik | Spezialist für digitales Marketing | SEO | Inhaltserstellung

Verbinde dich mit mir auf Linkedin.

Meine anderen Artikel zu DataPeaker: Verknüpfung.

Vielen Dank.

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.