Python はテキスト データの解析と変更に使用されます - pyparsing モジュール チュートリアル

Python ライブラリの解析アドレス PyParsing

Python プログラミング言語の pyparsing モジュールは、テキスト データを操作するための貴重なツールであることが一般に受け入れられています。

テキスト データを解析および操作するための pyparsing パッケージ。アドレスの操作を簡素化します。これは、モジュールがアドレスを変換し、解決するのに役立つためです。

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

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

PyParsing を使用した簡単なアドレス解析

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

567 Main Street

このアドレスを解決するには、次の手順に従ってください。

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

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

from pyparsing import *

2. 変数を作成する

ここで変数を作成し、解決したいアドレスに割り当てます。

address = "567 Main Street"

3. 分解

次に、数字とアルファについて言及して、アドレス部分を詳しく説明します。

addressParser = Word(nums) + Word(alphas) + Word(alphas)

次に、変数を作成し、pyparsing ライブラリから parseString を呼び出します。

addressParts = addressParser.parseString(address)

4. 印刷する

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

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 に似ていますが、選択した他のトークンに置き換えることができます。

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 = Word(alphanums)('key')

CSV ファイルの出力から = 記号を削除したいと考えています。サプレス機能を使用します。

equals = Suppress('=')

次に、値の部分の変数を作成します。また、住所データセットには文字と数字の両方を含めることができるため、英数字についてももう一度触れます。

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
#Python小白学习交流群:153708845
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 "L" は、テキストをトークンに解析し、個々のトークンを取得または置換するときに、正規表現に代わるより強力で成熟した代替手段を提供します。

たとえば、ネストされたフィールドは PyParsing には適していますが、正規表現には適していません。このパーサーは、lex や yacc のような昔ながらのフォールバック プログラムに似ています。

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

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

おすすめ

転載: blog.csdn.net/qdPython/article/details/132250465
おすすめ