Pythonのシンプルなメタサーチアルゴリズム

叙情的な余談



大学での研究の一環として、テキスト情報の分類などのタスクに出会いました。 実際、入力で特定のテキストドキュメントを処理し、出力配列を返すアルゴリズムを作成する必要がありました。出力配列の各要素は、このテキストが特定のトピックの1つに属するかどうか(確率または信頼度)の尺度になります。



この記事は、分類問題を具体的に解決することではなく、ルブリケーターを開発する最も退屈な段階を自動化すること、つまりトレーニングサンプルを作成することについてです。



手で作業するのが面倒なとき



私の最初で最も明白な考えは、Pythonで簡単なメタ検索アルゴリズムを書くことです。 つまり、すべての自動化は、独自のデータベースがないために別の検索エンジン(Google検索)の発行を使用することになります。 すぐに予約すると、pygoogleなど、同様の問題を解決する既製のライブラリが既にあります。



要点をつかむ



HTTPリクエストのリクエストとBeautifulSoup解析ライブラリを使用して、検索結果からリンクを抽出しました。 起こったことは次のとおりです。



from bs4 import BeautifulSoup import requests query = input('What are you searching for?: ' ) url ='http://www.google.com/search?q=' page = requests.get(url + query) soup = BeautifulSoup(page.text) h3 = soup.find_all("h3",class_="r") for elem in h3: elem=elem.contents[0] link=("https://www.google.com" + elem["href"]) print(link)
      
      





Chromeの検索結果ページの{h3 class = "r"}タグにあるサイトへのリンクのみをプルしました。



さて、それでは、ブラウザのいくつかのページをバイパスしてリンクをピックアップしてみましょう。



 from bs4 import BeautifulSoup import requests query = input('What are you searching for?: ' ) number = input('How many pages: ' ) url ='http://www.google.com/search?q=' page = requests.get(url + query) for index in range(int(number)): soup = BeautifulSoup(page.text) next_page=soup.find("a",class_="fl") next_link=("https://www.google.com"+next_page["href"]) h3 = soup.find_all("h3",class_="r") for elem in h3: elem=elem.contents[0] link=("https://www.google.com" + elem["href"]) print(link) page = requests.get(next_link)
      
      





Chromeは、次のページのアドレスをタグ{a class = "fl"}に保存します。



最後に、いくつかのページから情報を取得し、将来の見出しのために辞書を作成してみましょう。 同じウィキペディアから必要な情報を収集します。



 from bs4 import BeautifulSoup import requests dict="" query = input('What are you searching for?: ' ) url ='http://www.google.com/search?q=' page = requests.get(url + query) soup = BeautifulSoup(page.text) h3 = soup.find_all("h3",class_="r") for elem in h3: elem=elem.contents[0] elem = elem["href"] if "wikipedia" in elem: link=("https://www.google.com" + elem) break page = requests.get(link) soup = BeautifulSoup(page.text) text = soup.find(id="mw-content-text") p= text.find("p") while p != None: dict+=p.get_text()+"\n" p = p.find_next("p") dict=dict.split()
      
      





「god」というクエリに対して、3,500個の用語を含む優れた辞書を取得します。実際には、句読点、リンク、ストップワード、その他の「ゴミ」を削除して、ファイルで変更する必要があります。



おわりに



完了した作業を要約すると、もちろん辞書が「生」であることが判明し、特定のリソースにパーサーを「ドラッグ」すると、その構造を調べる時間が必要であることに注意してください。 これは簡単な考えにつながります-トレーニングサンプルを自分で生成するか、既製のデータベースを使用する価値があります。



一方、パーサー(不必要なタグからhtmlマークアップをクリアすることは難しくありません)と多数のクラスを書くことに十分な注意を払えば、ある程度の自動化により、必要な柔軟性がルビケーターに追加されます。



使用ツールへのリンク



BeautifulSoup: www.crummy.com/software/BeautifulSoup

リクエスト: docs.python-requests.org/en/latest



All Articles