Python アドレス パーサー

Abid Ullah 2023年10月10日
  1. Python ライブラリ PyParsing を使用して住所を解析する
  2. Python で PyParsing を使用して CSV ファイルから住所を解析する
Python アドレス パーサー

この記事では、Python を使用して住所を解析する方法を紹介します。 pyparsing ライブラリを使用してアドレスを手動で解析し、CSV ファイル内のアドレスに対して関数または pyparsing を使用します。

簡単な例から始めて、次に複雑な例に進みます。

Python ライブラリ PyParsing を使用して住所を解析する

Python プログラミング言語の pyparsing モジュールが、テキスト データの操作を実行するための非常に貴重なツールであることは広く認められています。

テキスト データの解析と変更に使用される pyparsing パッケージは、アドレスの操作を簡素化します。 これは、モジュールがアドレスを変換して解析できるためです。

この記事では、解析と変更を処理するための PyParsing モジュールの使用法について説明します。 PyParsing モジュールを使用して住所を解析する実際の例を見てみましょう。

その後、より広範な例を見て、PyParsing を使用して住所データを変更および解析する方法を示します。

PyParsing を使用した単純な住所解析

まず、Python ライブラリ PyParsing を使用してアドレスを解析する基本的な例を見てみましょう。 最初の例として、次のアドレスを見て解析してみましょう。

567 Main Street

このアドレスを解析するには、次の手順に従います。

  • pyparsing ライブラリをインポートする

    最初に、* を指定して、すべてのモジュールと関数を含む pyparsing ライブラリをインポートします。

    from pyparsing import *
    
  • 変数を作成する

    次に、変数を作成し、解析するアドレスに割り当てます。

    address = "567 Main Street"
    
  • 壊す

    ここで、numsalphas に言及してアドレス部分を分解します。

    addressParser = Word(nums) + Word(alphas) + Word(alphas)
    
  • 次に、変数を作成し、ライブラリ pyparsing から parseString を呼び出します。
    addressParts = addressParser.parseString(address)
    
  • 印刷する

    最後に、変数を出力して結果を確認します。

    print(addressParts)
    

コード全体を書き、それを実行して結果を見てみましょう。

from pyparsing import *

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

出力:

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

このコードは、住所を 4つの部分 (番地、通りの名前、通りの種類、住所の州) に解析します。

通り番号は最初の部分、通りの名前は 2 番目の部分、通りの種類は 3 番目の部分、州は最後の部分になります。

PyParsingの4つの便利な機能

利用可能な 4つの関数のいずれかを使用して、実際の解析を行うことができます。

  1. ParseString - parseString を使用すると、末尾の不要なコンテンツを気にすることなく、最初からテキストの解析を開始できます。
  2. ScanString - ScanString は、re.finditer() のように、入力文字列から一致する単語を検索します。
  3. SearchString - SearchStringscanString に似ていますが、単一のトークンを返す代わりにそれらのコレクションを提供します。
  4. TransformString - TransformStringscanString に似ていますが、トークンを選択した他のトークンに置き換えることができます。

Python で PyParsing を使用して CSV ファイルから住所を解析する

アドレス情報は、CSV ファイルに頻繁に記録される特定のデータです。 構造が大きく異なるため、解析が難しい場合があります。

pyparsing モジュールは、定義された構造を使用して CSV ファイルからアドレスを抽出することを簡素化します。 まず、アドレスを正しく解析する方法について、いくつかの簡単なガイドラインと関数を定義しましょう。

その後、アドレスを含む CSV ファイルの解析にこれらの原則を適用します。

構成ファイルまたはアドレスの CSV ファイルが次のようになっているとします。

city=LAUDERDALE, state=FL, Zipcode: 33316

key=value 形式で文字列を解析する必要があります。 KEY=VALUE 文字列には、キー、等号、値の 3つの部分があります。

このような式の解析の最終出力に等号を含める必要はありません。 Suppress() メソッドを使用して、トークンが出力に含まれないようにすることができます。

トークン名は、setResultsName() 関数によって、またはパーサーの構築時に名前を引数としてパーサーを呼び出すことによって提供できます。これにより、特定のトークンを取得するのが少し簡単になります。 トークンには、できれば関連付けられた名前を付ける必要があります。

コードを試して、pyparsing が CSV ファイルでどのように機能するかを見てみましょう。

pyparsing ライブラリとそのすべての関数とモジュールをインポートすることから始めます。

from pyparsing import *

次に、出力用の入力の key 部分の変数を作成します。 アドレスのデータセットにはアルファベットと数字を含めることができるため、alphanums について説明します。

key = Word(alphanums)("key")

CSV ファイルの出力から = 記号を削除します。 Suppress 関数を使用します。

equals = Suppress("=")

次に、value 部分の変数を作成します。 繰り返しますが、アドレスのデータセットにはアルファベットと数字を含めることができるため、alphanums について言及します。

value = Word(alphanums)("value")

ここで、変数を連結する別の変数を作成します。

keyValueExpression = key + equals + value

次に、ファイル形式を使用して住所の CSV ファイルを開きます。 file.read 関数を使用して、ファイル内のすべてのデータを読み取ります。

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

この後、scanString 関数または pyparsingfor ループを使用して、アドレスの各行を 1つずつ読み取ります。

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

最後に、print 関数を使用して結果を確認します。

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

ここでコードは終了です。コード全体を記述して実行します。 アドレスを含む CSV ファイルを提供すると、どのような出力が得られるかを確認します。

# 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))

出力:

city is LAUDERDALE
state is FL

コードの出力には、ファイルに含まれるデータが表示されます。 address.csv ファイルには、アドレスが 1つしかありませんでした。

また、アドレスが解析されるときに pyparsing ライブラリを使用する機能を確認できます。

PyParsing は、テキストをトークンに解析し、個々のトークンを取得または置換する際に、正規表現に代わるより堅牢で成熟した代替手段を提供します。

たとえば、ネストされたフィールドは PyParsing では問題ありませんが、正規表現では問題になります。 このパーサーは、lexyacc などの古いスタンバイに似ています。

つまり、正規表現を使用してタグを検索し、HTML からデータを抽出することはできますが、HTML ファイルの検証には使用できません。 ただし、pyparsing を使用すると、これを実現できます。

この記事が、Python で使用される住所パーサーを理解するのに役立つことを願っています。

著者: 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