2017-04-24 13 views
1

入力:「私の好きなゲームは義務です」NLTKのキーワードをどのようにトークン化するのですか?

私はキーワードとして "コールオブデューティ"を設定します。このフレーズはトークン化プロセスでは1つの単語になります。

は、最後に結果を取得したい:[「私」、「好きな」、「ゲーム」、「で」、「義務の呼び出しを」]

ので、pythonのNLPにおけるキーワードを設定する方法?

+3

なぜトークンになりますか?トークンではなくエンティティとして認識されるようにします。 – erip

答えて

2

私はあなたが望むのは、キーフレーズの抽出です。たとえば、最初に各単語にPoSタグをタグ付けしてから、PoSタグに何らかの正規表現を適用して興味のある単語をキーフレーズに結合します。

import nltk 
from nltk import pos_tag 
from nltk import tokenize 

def extract_phrases(my_tree, phrase): 
    my_phrases = [] 
    if my_tree.label() == phrase: 
     my_phrases.append(my_tree.copy(True)) 

    for child in my_tree: 
     if type(child) is nltk.Tree: 
      list_of_phrases = extract_phrases(child, phrase) 
      if len(list_of_phrases) > 0: 
       my_phrases.extend(list_of_phrases) 

    return my_phrases 


def main(): 
    sentences = ["My favorite game is call of duty"] 

    grammar = "NP: {<DT>?<JJ>*<NN>|<NNP>*}" 
    cp = nltk.RegexpParser(grammar) 

    for x in sentences: 
     sentence = pos_tag(tokenize.word_tokenize(x)) 
     tree = cp.parse(sentence) 
     print "\nNoun phrases:" 
     list_of_noun_phrases = extract_phrases(tree, 'NP') 
     for phrase in list_of_noun_phrases: 
      print phrase, "_".join([x[0] for x in phrase.leaves()]) 

if __name__ == "__main__": 
    main() 

この意志の出力以下:

Noun phrases: 
(NP favorite/JJ game/NN) favorite_game 
(NP call/NN) call 
(NP duty/NN) duty 

しかし、あなたは正確に何をしたい得ることができるようにあなたは、

式の他のタイプをしようと
grammar = "NP: {<DT>?<JJ>*<NN>|<NNP>*}" 

で遊んことができ、あなたが一緒に参加したい単語/タグに依存します。興味のある方は

はまた、/単語抽出をキーフレーズには、この非常に良い導入を確認してください。

https://bdewilde.github.io/blog/2014/09/23/intro-to-automatic-keyphrase-extraction/

0

をこれは、もちろん、OPするのに有用であることがあまりにも遅れているが、私は私と思いました

本当に聞いているように聞こえます:「義務の呼び出し」のような複合語が1つのトークンとしてまとめられていることを確認するにはどうすればよいですか?

あなたはそうのように、NLTKのマルチワード表現トークナイザを使用することができます:mweはマルチワード表現の略

string = 'My favorite game is call of duty' 
tokenized_string = nltk.word_tokenize(string) 

mwe = [('call', 'of', 'duty')] 
mwe_tokenizer = nltk.tokenize.MWETokenizer(mwe) 
tokenized_string = mwe_tokenizer.tokenize(tokenized_string) 

tokenized_stringの値は['My', 'favorite', 'game', 'is', 'call of duty']

関連する問題