私は、提供または検索、出発地と目的地、および日付と時刻によって、ライドシェア Facebook グループからの投稿を分類する作業を行っています。人々は次のようなものを投稿します:
オファリング: SF からサウス ウェスト ラ (トーランス) まで 今週の木曜日の夜、つまり明日の 6 時か 7 時に出発
と
オファリング: SFO--->LA (ビバリーヒルズ エリア) 木曜日の午前 9 時 30 ドルのガス
正規表現を使用して、テキストをクリーンアップします。
SF から南西ラ トーランスまで提供し、この木曜日の夜、つまり明日の 6 時か 7 時頃に出発します
と
ラ ビバリー ヒルズ エリアに sfo を提供 木曜日の午前 9 時 30 ガス
次に、クリーンアップされた新しい投稿を mysql データベースに保存します。
ナイーブベイのトレーニングセットを作成する前に、場所を削除してメタワードに置き換えるようにアドバイスされました(他のアルゴリズムの提案を歓迎します)。ucla (「sf」などの都市と郡の略語を含む)、都市、郡などの場所をチェックします。Python の NLTK ライブラリを使用して場所を削除し、メタ ワードに置き換えながら、どの場所がどのメタ ワードに対応するかを追跡したいと考えています。
#check if post contains a city name
#param post is an array containing post_id and post text
def checkForCities(con,post):
cur = con.cursor()
cur.execute("SELECT id,city FROM CITIES;")
#keep track of number of locations found as all locations are represented by the same word
location_num = 0
clean_post = post[1]
for i in range(cur.rowcount):
row = cur.fetchone()
if clean_post.find(row[1].lower()) != -1:
#using replace instead of regex..not sure which is better...
new_post = new_post.replace(row[1].lower(),'LOCATION_NAME')
location_num+=1
insertNewPostIntoLocationTable(con,post[0],new_post,row[0],location_num,Locations.Cities)
return new_post
上記のコード (checkForPlaces 関数は示されていませんが、実質的に同じです) では、2 番目の投稿は次のようになります。
LOCATION から LOCATION LOCATION エリアに木曜日の午前 9 時 30 分に LOCATION を提供します。
最初の場所が sfo、2 番目が la、3 番目がビバリーヒルズに対応することを追跡します。
- ご覧のとおり、sf は San Francisco の略です。テキストをデータベースに入れる前に最初にクリーンアップするとき、サンフランシスコのすべてのインスタンスを SF に置き換えるか、SF のすべてのインスタンスをサンフランシスコに置き換える必要がありますか? 略語を頻繁に誤って置き換えていたため、現在前者を実行しています(おそらく私の正規表現には作業が必要ですか?)。
- あるいは、すべての都市のリストを作成し、その都市または略語が投稿に存在するかどうかを NLTK 関数に教えてもらうと、はるかに簡単になります。そのようなものは存在しますか?おまけの質問: 日付と時刻を解析する方法 (考えられるすべての形式で表示されます)。
ここでより多くの投稿例を見つけることができます