2017-03-26 28 views
0

私は自分のプロジェクトで問題に取り組んでいます。 私はのようなタイプを格納したカラムを持つDBを持っています。 "15分休憩"または"30分の空き時間" カテゴリ別のカラムを作成したいとします。 私のカテゴリは、辞書に格納されています。文字列の辞書から単語を見つけよう

{ "short":["10","5","15","10min","5min","15min","shorter"], 
"middle":["20","25","30","35","20min","25min","30min","35min"], 
"long":["40","45","50","55","60","40min","45min","50min","55min","60min"]} 

私のpythonを使用してタイプにカテゴリを割り当てることができますどのように任意のアイデアを? 辞書の中の単語との類似性を見つけるためにその部分を意味するのですか? 私のコードは、これまで

...calling sql select 
for i, index in rows(): 
    type = index[0] 
    if (any of words from dictionary) is in type: 
     category = (name of category, for example "short") 
     update in sql 
     ... 

THX

+0

私は本当にあなたが望むものを手に入れません。 * input *と* output *の例を提供できますか? –

+0

適用するアルゴリズムが分かりますか?そうでない場合、これは正しい場所ではありません。もしそうなら、それをあなたの質問に明記するべきです。 – WNG

+0

私の問題の理解を深めるために私のコードの擬似コードを追加しました。 – mirko

答えて

0

あなたはブレークの説明にあるカテゴリのマーカーのもしあればを知りたいです。 s1s2は、あなたがサンプル記述されている、とdがあなたの辞書であると仮定します

s1 = "15 mins break" 
s2 = "30 min free time" 
s3 = "something5something" 

その後、次の式では、(re.findall()の目的は、テキストをトークン化することで、そのカテゴリに評価され、適しているものは何でもして正規表現を置き換えます

[cat for cat in d if any(marker in re.findall(r'[a-z0-9]+',s1) for marker in d[cat])] 
#['short'] 

[cat for cat in d if any(marker in re.findall(r'[a-z0-9]+',s2) for marker in d[cat])] 
#['middle'] 

[cat for cat in d if any(marker in re.findall(r'[a-z0-9]+',s3) for marker in d[cat])] 
#[] 

これは、すべての文字列が小文字であることを前提としています。

+0

私はこのようなことを試みましたが、それは私に偽の肯定的な答えを与えます。 たとえば、 's =" something5something "' – mirko

+0

のような文字列を見た場合、 're.findall()'(更新された解答を見てください)や 'nltk.world_tokenize()'のようなトークナイザが必要です。 – DyZ

+0

ありがとう、それは動作します。 私はどのように、なぜそれがうまくいくのかを研究するつもりです。 Ty – mirko

関連する問題