あなたは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
'''
ここでは最適化する可能性は間違いありません。あなたはステミングと字形化について言及しました。それはおそらく組み込むことをお勧めします。私は句読点を削除することも考えているので、 "これは詐欺です"のようなものは見逃せません。
実際には、単語のリストや単語のセットを作成する方法を理解しようとしています。たとえば、[詐欺または詐欺または偽物またはスタント]。これは理にかなっていますか?ありがとう – glongo
@GinaBoBina私は理解していません。私は最初に「各リストの単語のうちの1つが存在することが必要です」と混乱しました。あなたが「1つのマークされた」とは何を意味するのかわかりません...あなたは「セット」をお探しですか? df_flag_fraud ['Post_Text']。values) ' –
私は不明ですが、残念です。さて、私は約220万の会話の投稿をしています。特定の単語がどのように配置されているかに基づいて、これらの投稿のセットをサンプルしたいと思います。たとえば、投稿1:「彼の年齢は赤旗であり、これは詐欺だと思う」 「フラグ」と「詐欺」という言葉に基づいて、これは私がサンプルしたいものです。しかし、詐欺、詐欺などのような詐欺にはいくつかの異なる言葉があります。だから、私はPythonに単語のセットを与え、私の記事の中のこれらの言葉のいずれかを探したいと思っています。どのように私はシノニムを探すためのpythonのための方法を作成するのですか?これは理にかなっていますか?ありがとう – glongo