2011-05-25 1 views
4

私は会社名のリストを持っています。私はurlの会社名のリストを持っています。Python(url)の大量のテキスト内の文字列をあいまいに照合

最終目標は、URLの中に見て、私のリストにあるどのように多くのURLの企業を見つけることです。

例URL:http://www.dmx.com/about/our-clients

各URLは別々に構成することになるので、私は正規表現検索を行うには良い方法があり、各会社名の個々の文字列を作成しないでください。

私は、URLの全体の内容のリストから、各企業を検索するためのforループを構築したいと思います。しかし、Levenshteinは短い文字列と大きな文字列の2つの小さな文字列よりも優れているようです。

この初心者はどこを見ているのですか?

答えて

5

「あいまいな」マッチングが必要なように私には聞こえません。そして私はあなたが "url"と言うとき、あなたは "urlが指すアドレスのウェブページ"を意味すると仮定しています。あなたは、文字列の大文字と小文字のミスマッチを心配している場合だけ大文字にそれをすべて変換し、

>>> import urllib2 
>>> webpage = urllib2.urlopen('http://www.dmx.com/about/our-clients') 
>>> webpage_text = webpage.read() 
>>> webpage.close() 
>>> for name in ['Caribou Coffee', 'Express', 'Sears']: 
...  if name in webpage_text: 
...   print name, "found!" 
... 
Caribou Coffee found! 
Express found! 
>>> 

:ちょうどPythonの組み込みのサブストリング検索機能を使用します。

>>> webpage_text = webpage_text.upper() 
>>> for name in ['CARIBOU COFFEE', 'EXPRESS', 'SEARS']: 
...  if name in webpage_text: 
...   print name, 'found!' 
... 
CARIBOU COFFEE found! 
EXPRESS found! 
+0

+1これは絶対にブルートフォースのアプローチであり、かなり効率的です。 – jathanism

+1

それは意味があり、良いスタートです。私がファジーマッチングを考えている理由は、 "Sears Inc."対 "シアーズ" ...など – Kyle

+0

@カイル、私はあなたのポイントを参照してください - あなたの名前のリストが完全な会社名の最短明確な接頭辞を含む限り、それは大きな問題になる可能性は低いです。たとえば、あなたのリストに「Sears」がある場合、「Sears、Inc.」もマッチします。偽陰性を引き起こす可能性があるいくつかの状況があります。しかし、あいまいなマッチングでは、おそらく偽陽性になるので、それはあなたがより耐え難いと思うものに依存すると思います。 – senderle

3
私はのは、それが(例えば、すべての特殊文字を削除し、webpage_textと文字列のリストにそれを適用何とか自分の名前を正規化するために意味をなすことを答えるsenderleして追加することになり

def normalize_str(some_str): 
    some_str = some_str.lower() 
    for c in """-?'"/{}[]()&!,.`""": 
     some_str = some_str.replace(c,"") 
    return some_str 

これは十分ではありません場合は、difflibに行くと何か行うことができます。

for client in normalized_client_names: 
    closest_client = difflib.get_closest_match(client_name, webpage_text,1,0.8) 
    if len(closest_client) > 0: 
     print client_name, "found as", closest_client[0] 

私が選んだ任意のカットオフ(ラトクリフ/ Obershelpのを)0.8の比率があまりにも寛大Oかもしれrタフ;それと少し遊んでください。

+0

+1の正規化 - 私はそれを言及することを考えていたが、私は去らなければならなかった。 – senderle

関連する問題