2016-07-11 14 views
0

シノニム単語のリストを作成し、同じ場所にpython検索をしたいのですが、リスト内のすべての単語を表示する必要はありません。私は、各リストの単語の1つが存在する必要があります。リスト内のすべての単語ではなく、リスト内の1単語のテキストを検索するにはどうすればよいですか?

私はオンラインフォーラムのスレッドをcsvファイルに入れています。私はこれらのスレッドで同じ場所にある単語を探していました。たとえば、「詐欺」と「旗」という言葉が同じ投稿に表示されている場合(下のコードを参照)、それらの投稿を取得できます。

def searchWord(word, string):  
    if word in string: 
     return 1 
    else: 
     return 0 

df['flag'] = df['Post_Text_lowercase'].apply(lambda x: 1 if 'flag' in x else 0) 
df['flag'] = df['Post_Text_lowercase'].apply(lambda x: searchWord('flag', x)) 

df['flag'].value_counts() 

df['fraud'] = df['Post_Text_lowercase'].apply(lambda x: 1 if 'fraud' in x else 0) 

df['flag_fraud'] = df['flag'] & df['fraud'] 

df_flag_fraud = df[ df['flag_fraud'] == 1 ].copy() 

df_flag_fraud['Post_Text'].values 

しかし、今私は[「詐欺」、「詐欺師」、「偽」、「ユーザー」]や[「フラグ」]と言うを検索したいのですが、最初の単語のいずれかが必要それらのすべてではなく、表示するリスト。これはどうすればいいですか? (あなたが気づいたら、私は、私が茎を作ったりlemmentizeすることができますが、それは私が探しているものを正確につかむことはできません)。私は初心者なので、私のコードはここで最善の方法ではないかもしれないことに気付きました。

ありがとうございます。私はあなたから多くのことを学んでいます。

答えて

1

あなたは1つ以上の単語を提供し、あなたが提供した単語またはその同義語のいずれかを含むすべての投稿を返したいと思います。

単語の同義語がわかりにくいようです。一部have suggestedを使用してWordNetを使用しています。私はあなたが考慮する必要がある同義語がより限定されていると仮定します。同じ関係と重みを持つグループ内の同義語の重要性をすべて大丈夫です。

グラフデータ構造を使用してアプローチし、同じ意味の単語セットごとにグラフを作成できます。私はこのpostで見つけたGraphの実装を使用しています - おそらく残念ですが、すぐにポイントを取得するのに役立ちます。

# Produce a set of synonyms for each idea you're interested in searching for 
synonyms = ["scam", "fraud", "sham", "swindle", "hustle", "racket"] 

# Create a complete graph which connects each word in 
# a group of synonyms to every other with equal weight 
synonyms = [(x, y) for x in synonyms for y in synonyms] 
print synonyms 
''' 
[('scam', 'scam'), 
('scam', 'fraud'), 
('scam', 'sham'), 
('scam', 'swindle'), 
('scam', 'hustle'), 
('scam', 'racket'), 
('fraud', 'scam'), 
('fraud', 'fraud'), 
('fraud', 'sham'), 
('fraud', 'swindle'), 
('fraud', 'hustle'), 
('fraud', 'racket'), 
('sham', 'scam'), 
('sham', 'fraud'), 
('sham', 'sham'), 
('sham', 'swindle'), 
('sham', 'hustle'), 
('sham', 'racket'), 
('swindle', 'scam'), 
('swindle', 'fraud'), 
('swindle', 'sham'), 
('swindle', 'swindle'), 
('swindle', 'hustle'), 
('swindle', 'racket'), 
('hustle', 'scam'), 
('hustle', 'fraud'), 
('hustle', 'sham'), 
('hustle', 'swindle'), 
('hustle', 'hustle'), 
('hustle', 'racket'), 
('racket', 'scam'), 
('racket', 'fraud'), 
('racket', 'sham'), 
('racket', 'swindle'), 
('racket', 'hustle'), 
('racket', 'racket')] 
''' 
synonyms_graph = Graph(synonyms) 
print synonyms_graph 
''' 
Graph({'fraud': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']), 'scam': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']), 'racket': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']), 'swindle': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']), 'hustle': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']), 'sham': set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle'])}) 
''' 

# Add another network of synonyms for a different topic 
synonyms = ["flag", "problem", "issue", "worry", "concern"] 
synonyms_graph.add_connections([(x, y) for x in synonyms for y in synonyms]) 

# Now you can provide any word in a synonym group and get all the other synonyms 
print synonyms_graph._graph["scam"] 
''' 
set(['fraud', 'scam', 'sham', 'racket', 'hustle', 'swindle']) 
''' 
print synonyms_graph._graph["flag"] 
''' 
set(['flag', 'issue', 'problem', 'worry', 'concern']) 
''' 

# Apply this to your dataframe 
df["Post_Word_Set"] = df["Post_Text_lowercase"].apply(lambda x: set(x.split())) 
df["scam"] = df.apply(lambda x: 1 if x.Post_Word_Set.intersection(synonyms_graph._graph["scam"]) else 0, axis=1) 
df["flag"] = df.apply(lambda x: 1 if x.Post_Word_Set.intersection(synonyms_graph._graph["flag"]) else 0, axis=1) 
posts_of_interest = df[(df.scam.values == 1) | (df.flag.values == 1)].Post_Text_lowercase 

print posts_of_interest 
''' 
This makes me worry. Maybe it's a scam 
Big red flag here 
So sick of all this fraud 
Name: Post_Text_lowercase, dtype: object 
''' 

ここでは最適化する可能性は間違いありません。あなたはステミングと字形化について言及しました。それはおそらく組み込むことをお勧めします。私は句読点を削除することも考えているので、 "これは詐欺です"のようなものは見逃せません。

+0

実際には、単語のリストや単語のセットを作成する方法を理解しようとしています。たとえば、[詐欺または詐欺または偽物またはスタント]。これは理にかなっていますか?ありがとう – glongo

+0

@GinaBoBina私は理解していません。私は最初に「各リストの単語のうちの1つが存在することが必要です」と混乱しました。あなたが「1つのマークされた」とは何を意味するのかわかりません...あなたは「セット」をお探しですか? df_flag_fraud ['Post_Text']。values) ' –

+0

私は不明ですが、残念です。さて、私は約220万の会話の投稿をしています。特定の単語がどのように配置されているかに基づいて、これらの投稿のセットをサンプルしたいと思います。たとえば、投稿1:「彼の年齢は赤旗であり、これは詐欺だと思う」 「フラグ」と「詐欺」という言葉に基づいて、これは私がサンプルしたいものです。しかし、詐欺、詐欺などのような詐欺にはいくつかの異なる言葉があります。だから、私はPythonに単語のセットを与え、私の記事の中のこれらの言葉のいずれかを探したいと思っています。どのように私はシノニムを探すためのpythonのための方法を作成するのですか?これは理にかなっていますか?ありがとう – glongo

関連する問題