これは間違った方法です。私は会社の名前の2つのcsv文書をリストに入れました。そして、2つのリストを比較して名前が似ている場所を見つけようとしています。PythonとPandasを使用してオブジェクトリストを別のリストと比較する
名前は小文字で、句読点は削除されていますが、情報を入力する人が会社のIDを省略したり、単語のスペルを間違えたりすることがあるため、名前の類似度に基づいてスコアを割り当てる方法を見つけようとしています。その後
Walgreens Boots Alliance
CARDINAL HEALTH
EXPRESS SCRIPTS HOLDING
j.p. morgan chase
Bank of America Corp
wells fargo
Home Depot
STATE FARM INSURANCE COS.
Johnson & Johnson
archer daniels midland
下部ケーシング、ストップワード/句読点の除去、および分割:
[walgreens, boots, alliance]
[cardinal, health]
[express, scripts, holding]
[jp, morgan, chase]
[bank, america, corp]
[wells, fargo]
[home, depot]
[state, farm, insurance, cos]
[johnson, johnson]
[archer, daniels, midland]
...と同様の第2
オリジナルデータは、この(ない実際のデータ)のようになります。私はパンダのための複雑なループを書いた
[cardinal, health]
[expres, scripts, holding]
[bank, america, corporation]
[wells, fargo]
[home, depot]
[state, farm, insurance, companies]
[archer, daniels]
[ford, motor, company]
[general, motors]
[john, deere]
:リストは次のようになりますリスト内の各単語が他のリストにも含まれているかどうかをテストします。
for index, row in df1[['Company Name Tokens']].iterrows():
for content in row:
for x in content:
df1.iloc[index]['Test'] = 0
df1.iloc[index]['Count'] = len(content)
for idx, rw in entities[['Company Name Tokens']]:
for r in rw:
if x in r:
df1.iloc[index]['Test'] = df1.iloc[index]['Test'] + 1
これは本当に遅いですが、私は効率が悪いと認識しています。かかわらず、私は、このアプローチは、私はエラーを得たので、処理するためのPythonインタプリタのためにあまりにも多くのかもしれないと思う:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-192-adea96d8cb82> in <module>()
4 df1.iloc[index]['Test'] = 0
5 df1.iloc[index]['Count'] = len(content)
----> 6 for idx, rw in entities[['Company Name Tokens']]:
7 for r in rw:
8 if x in r:
ValueError: too many values to unpack (expected 2)
私は、これはあまりにも困難にし、これを行うには良い方法はありますかな?
この「ナイーブな」方法は、常に遅くなります。あなたは逆インデックスのようなより良いデータ構造を使いたいと思っています - 最終的な仕事に応じて、単語が見つかった行番号のリストを含む単語の辞書を作成してください。 – liborm
@liborm interesting ... {'archer':[1,2,3,4]、 'daniels':[1,2,3,4]、 'midland':[]}のようなもの? – Twitch
データ構造やアルゴリズムの提案を得るには、あなたのタスクをもっと指定する必要があります。しかし、一般的にyes - データセットの1つをインデックスに処理し、他の検索語を1つずつスキャンしますインデックス。 – liborm