0

まず、これはチャット ボットのコードです。追跡する単語のリストをボットに渡してから、ルーム内のすべてのメッセージを分割しています。今、私は次のようなものを作る必要があります:

IF any word from my list is IN message.body THEN do something. 

しかし、すべての試みが失敗しました。これが私のコードです。

  leyendotracker = open("listas\eltracker.txt", "r") #Open file with tracker words
  buffertracker = leyendotracker.read() #Read words and save them in a variable
  leyendotracker.close() #Close file
  s1tracker = set(message.body.split()) #Set the messages in chat as a Set
  s2tracker = set(buffertracker) #Set the variable with words from file as a Set
  if s2tracker in s1tracker: #Check if any word from the file is in the message from chat.
    print("[TRACKER - "+user.name+" said: "+message.body)

それは理論的にはうまくいくはずですが、セットの仕組みを完全には理解していないので、問題をグーグルで調べて、リストをセットに変換しました(はい、両方ともリストであり、ディクテーションではありません)。それにもかかわらず、私はこの問題に対処してから 1 時間後に降伏します。

私は何が欠けていますか?手伝ってくれてありがとう :)

4

2 に答える 2

3

セット間に交差があるかどうかを確認する必要があると思います:

交差点(その他、...)

セット & その他 & ...

セットと他のすべてに共通する要素を持つ新しいセットを返します。

if s2tracker & s1tracker:
    # do smth
于 2013-09-04T11:29:46.620 に答える
1

組み込みのフィルター関数を使用します。

>>> hot_words = ["spam", "eggs"]
>>> message_body = "Oh boy, my favourite! spam, spam, spam, eggs and spam"
>>> matching_words = filter(lambda word: word in hot_words, message_body.split())
>>> matching_words
['eggs', 'spam']
>>> message_body = "No, I'd rather just egg and bacon"
>>> matching_words = filter(lambda word: word in hot_words, message_body.split())
>>> matching_words
[]

文字列を分割すると、明らかに個々の単語のリストに変わります。組み込みの「フィルター」は引数としてラムダ関数を受け取り、渡されたアイテムが結果セットに含まれるかどうかについて true または false を返す必要があります。 .

更新- コメントで尋ねていると思われる質問に答えるには: 行の後:

trackeado = filter(lambda word: word in buffertracker, message.body.split())

traceado は、単語のリストに一致するメッセージ内の単語を含むリストである必要があります。基本的に、そのリストの長さが 0 かどうかを確認する必要があります。

if len(trackeado) > 0:
    # Do something

更新更新- ああ、あなたの buffertracker はリストではなく、ファイルから読み込まれた単なる長い文字列であることに気付きました。私の例では、hot_words は探している個々の単語のリストです。ファイルのフォーマット方法によっては、ファイルをリストに変換するために何かを行う必要があります。

たとえば、ファイルがコンマ区切りの単語リストの場合は、次のようにします。

>>> words = buffer tracker.split(',')
>>> trackeado = filter(lambda word: word in words, message.body.split())
>>> if len(trackeado) > 0:
...     print "found"
于 2013-09-04T11:48:26.433 に答える