Python-Adressparser

Abid Ullah 10 Oktober 2023
  1. Analysieren Sie die Adresse mit der Python-Bibliothek PyParsing
  2. Analysieren Sie die Adresse aus der CSV-Datei mit PyParsing in Python
Python-Adressparser

Dieser Artikel zeigt Ihnen, wie Sie Adressen mit Python parsen. Wir werden die Bibliothek pyparsing verwenden, um die Adresse manuell zu parsen und die Funktionen oder pyparsing für Adressen in der CSV-Datei zu verwenden.

Wir beginnen mit einem einfachen Beispiel und gehen dann zu einem komplexen über.

Analysieren Sie die Adresse mit der Python-Bibliothek PyParsing

Es ist weithin anerkannt, dass das pyparsing-Modul der Programmiersprache Python ein unschätzbares Werkzeug zur Durchführung von Operationen an Textdaten ist.

Das Paket pyparsing zum Parsen und Modifizieren von Textdaten vereinfacht die Arbeit mit Adressen. Dies liegt daran, dass das Modul Adressen konvertieren und beim Parsen helfen kann.

In diesem Artikel besprechen wir die Verwendung des Moduls PyParsing zur Handhabung von Parsing sowie Modifikationen. Schauen wir uns ein reales Beispiel für das Parsen einer Adresse mit dem Modul PyParsing an.

Danach zeigen wir an einem ausführlicheren Beispiel, wie mit PyParsing Adressdaten verändert und geparst werden können.

Einfaches Adressparsing mit PyParsing

Beginnen wir mit einem einfachen Beispiel für das Parsen einer Adresse mit Hilfe der Python-Bibliothek PyParsing. Sehen wir uns als erstes Beispiel die folgende Adresse an und parsen sie.

567 Main Street

Gehen Sie folgendermaßen vor, um diese Adresse zu parsen:

  • Importieren Sie die Bibliothek pyparsing

    Zuerst importieren wir die Bibliothek pyparsing mit all ihren Modulen und Funktionen, indem wir * erwähnen.

    from pyparsing import *
    
  • Erstellen Sie eine Variable

    Jetzt erstellen wir eine Variable und weisen sie der Adresse zu, die wir analysieren möchten.

    address = "567 Main Street"
    
  • Abbauen

    Jetzt werden wir die Adressteile aufschlüsseln, indem wir nums und alphas erwähnen.

    addressParser = Word(nums) + Word(alphas) + Word(alphas)
    
  • Jetzt erstellen wir eine Variable und rufen parseString aus der Bibliothek pyparsing auf.
    addressParts = addressParser.parseString(address)
    
  • Drucken

    Schließlich drucken wir die Variable und sehen das Ergebnis.

    print(addressParts)
    

Lassen Sie uns den gesamten Code schreiben und ihn ausführen, um das Ergebnis zu sehen.

from pyparsing import *

address = "123 Main Street FL"
addressParser = Word(nums) + Word(alphas) + Word(alphas) + Word(alphas)
addressParts = addressParser.parseString(address)
print(addressParts)

Ausgang:

['123', 'Main', 'Street', 'FL']

Dieser Code zerlegt die Adresse in vier Teile: die Hausnummer, den Straßennamen, den Straßentyp und das Bundesland der Adresse.

Die Hausnummer ist der erste Teil, der Straßenname der zweite Teil, der Straßentyp der dritte Teil und das Bundesland der letzte Teil.

Vier nützliche Funktionen von PyParsing

Wir können eine von vier verfügbaren Funktionen verwenden, um das eigentliche Parsing durchzuführen.

  1. ParseString - Mit ParseString können Sie mit dem Parsen von Text von Anfang an beginnen, ohne sich Gedanken über unnötige Inhalte am Ende machen zu müssen.
  2. ScanString - ScanString durchsucht den Eingabestring nach passenden Wörtern, ähnlich wie re.finditer().
  3. SearchStringSearchString ist ähnlich wie scanString, außer dass es statt eines einzelnen Tokens eine Sammlung davon bereitstellt.
  4. TransformStringTransformString ähnelt scanString, erlaubt Ihnen aber, Token durch andere Ihrer Wahl zu ersetzen.

Analysieren Sie die Adresse aus der CSV-Datei mit PyParsing in Python

Die Adressinformationen sind bestimmte Daten, die häufig in CSV-Dateien aufgezeichnet werden. Da es große Unterschiede in ihrer Struktur gibt, sind sie möglicherweise schwer zu analysieren.

Das Modul pyparsing vereinfacht das Extrahieren von Adressen aus CSV-Dateien anhand einer definierten Struktur. Lassen Sie uns zunächst einige einfache Richtlinien und Funktionen zum korrekten Analysieren einer Adresse definieren.

Danach wenden wir diese Prinzipien auf das Parsen von CSV-Dateien an, die Adressen enthalten.

Angenommen, unsere Konfigurationsdatei oder die CSV-Datei der Adresse sieht in etwa so aus:

city=LAUDERDALE, state=FL, Zipcode: 33316

Wir müssen den String im Format Schlüssel=Wert parsen. Ein KEY=VALUE-String besteht aus drei Teilen: dem Schlüssel, dem Gleichheitszeichen und dem Wert.

Das Einfügen des Gleichheitszeichens in die endgültige Ausgabe einer Analyse eines solchen Ausdrucks ist nicht erforderlich. Mit der Methode Suppress() kann verhindert werden, dass ein Token in die Ausgabe aufgenommen wird.

Token-Namen können von der Funktion setResultsName() oder durch Aufrufen des Parsers mit dem Namen als Argument bereitgestellt werden, wenn der Parser erstellt wird, was das Abrufen bestimmter Token etwas einfacher macht. Token sollten vorzugsweise Namen haben, die ihnen zugeordnet sind.

Lassen Sie uns den Code ausprobieren und sehen, wie pyparsing mit CSV-Dateien funktioniert.

Wir beginnen mit dem Import der Bibliothek pyparsing mit all ihren Funktionen und Modulen.

from pyparsing import *

Zweitens erstellen wir eine Variable für den Schlüssel-Teil der Eingabe für die Ausgabe. Wir erwähnen alphanums, weil der Adressdatensatz Buchstaben und Zahlen enthalten kann.

key = Word(alphanums)("key")

Wir möchten das Zeichen = aus unserer Ausgabe in der CSV-Datei entfernen. Wir werden die Funktion Unterdrücken verwenden.

equals = Suppress("=")

Jetzt erstellen wir eine Variable für den Teil Wert. Und wieder erwähnen wir alphanums, weil der Adressdatensatz Buchstaben und Zahlen enthalten kann.

value = Word(alphanums)("value")

Jetzt erstellen wir eine weitere Variable, um die Variablen zu verketten.

keyValueExpression = key + equals + value

Jetzt öffnen wir unsere CSV-Adressdatei mit Dateiformatierung. Und verwenden Sie die Funktion file.read, um alle Daten in der Datei zu lesen.

with open("/address.csv") as address_file:
    address_file = address_file.read()

Danach verwenden wir eine for-Schleife mit der Funktion scanString oder pyparsing, um jede Zeile der Adresse einzeln zu lesen.

for adrs in keyValueExpression.scanString(address_file):
    result = adrs[0]

Und zuletzt verwenden wir die Funktion Drucken, um das Ergebnis zu sehen.

print("{0} is {1}".format(result.key, result.value))

Hier endet unser Code, und jetzt schreiben wir den gesamten Code, um ihn auszuführen. Und sehen Sie, welche Ausgabe wir erhalten, wenn wir eine CSV-Datei mit der Adresse bereitstellen.

# import library
from pyparsing import *

key = Word(alphanums)("key")
# delet = from the output
equals = Suppress("=")
value = Word(alphanums)("value")
keyValueExpression = key + equals + value
# use file formating to open csv file
with open("/content/address.csv") as address_file:
    address_file = address_file.read()
# use for loop to read your CSV file
for adrs in keyValueExpression.scanString(address_file):
    result = adrs[0]
    # print the output
    print("{0} is {1}".format(result.key, result.value))

Ausgang:

city is LAUDERDALE
state is FL

Die Ausgabe des Codes zeigt die Daten, die unsere Datei enthält. In der Datei address.csv hatten wir nur eine Adresse.

Und Sie können die Funktionalität der Verwendung der pyparsing-Bibliothek sehen, während die Adresse geparst wird.

PyParsing bietet eine robustere und ausgereiftere Alternative zu regulären Ausdrücken, wenn Text in Tokens zerlegt und einzelne Tokens abgerufen oder ersetzt werden.

Verschachtelte Felder sind beispielsweise für PyParsing kein Problem, wohl aber für reguläre Ausdrücke. Dieser Parser ähnelt eher den alten Standbys wie lex und yacc.

Mit anderen Worten, reguläre Ausdrücke können verwendet werden, um nach Tags zu suchen und Daten aus HTML zu extrahieren, aber sie können nicht verwendet werden, um eine HTML-Datei zu überprüfen. Mit pyparsing könnten Sie dies jedoch erreichen.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um den in Python verwendeten Adressparser zu verstehen.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn