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"
-
壊す
ここで、
nums
とalphas
に言及してアドレス部分を分解します。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つの関数のいずれかを使用して、実際の解析を行うことができます。
ParseString
-parseString
を使用すると、末尾の不要なコンテンツを気にすることなく、最初からテキストの解析を開始できます。ScanString
-ScanString
は、re.finditer()
のように、入力文字列から一致する単語を検索します。SearchString
-SearchString
はscanString
に似ていますが、単一のトークンを返す代わりにそれらのコレクションを提供します。TransformString
-TransformString
はscanString
に似ていますが、トークンを選択した他のトークンに置き換えることができます。
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
関数または pyparsing
で for
ループを使用して、アドレスの各行を 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
では問題ありませんが、正規表現では問題になります。 このパーサーは、lex
や yacc
などの古いスタンバイに似ています。
つまり、正規表現を使用してタグを検索し、HTML からデータを抽出することはできますが、HTML ファイルの検証には使用できません。 ただし、pyparsing
を使用すると、これを実現できます。
この記事が、Python で使用される住所パーサーを理解するのに役立つことを願っています。
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