2017-10-02 16 views
-2
私はいくつかの助けを使用することができます&をPYTHONに新しいです

から抽出文:私は、リスト内で繰り返し同じキー値を持つ(辞書を持ってPythonの段落

これは単なるサンプルです

list_dummy = [{'a': 1, 'b':"The house is great. I loved it.",'e':"loved,the"}, {'a': 3, 'b': "Building is white in colour. I liked it.",'e':"colour"}, {'a': 5, 'b': "She is looking pretty. She is in my college",'e':"pretty"}] 

'b' が - 本文 'E' で構成されています - ワードで構成することができます(複数の)私はSEを抽出したい

それらの中に「e」からの1つまたは複数の単語のいずれかを含む「b」の中にあるネトセンス。

まず、テキストをsent_tokenize &より抽出する必要がある文章に分割する必要があります。 Sent_tokenizeは文字列のみを入力として受け取ります。どうやって進める?

答えて

0

まあ、私はNLTKモジュールをテストするために働いて得るように見えることはできませんが、限りsent_tokenize()が文の文字列のリストを返すように私は(私が正しく理解されている場合)あなたが望んでいるものをやるべきだと思う。このような何か:

ans = [] 
for d in list_dummy: 
    tmp = sent_tokenize(d['b']) 
    s = [x for x in tmp if any(w.upper() in x.upper() for w in d['e'].split(","))] 
    ans += s 

これは、常にeがカンマで区切られたリストであり、大文字と小文字を区別しない検索に関心があることを前提としています。 ans変数は、辞書の 'e'値からの単語を含む文のフラットリストになります。

EDIT

あなたは正規表現を使って好みの場合は、reモジュールを使用することができます。

import re 
ans = [] 
for d in list_dummy: 
    b = sent_tokenize(d['b']) 
    e = d['e'].split(",") 
    rstring = ".*" + "|".join(e) + ".*" 
    r = re.compile(rstring) 
    ans.append([x for x in b if r.match(x)]) 
+0

コードが作業をdoesnot ..私は(ANS)を印刷する場合、それは私を与えます:[ '私はそれが好きだった」、「彼女はきれいに見えている」、「彼女は私の大学にいる」など、文全体だけを返す。 – Deepti

+0

Hi Deepti、私は最初に投稿したときに間違いを犯したと思います。編集したコードが問題を修正していますか? –

+0

はい、それは私にそれらの文章だけを与えます。しかし、どのようにして、文章を分けることができますか?それに対応して、辞書の価値に必要な抽出された文章を得ることができます。私はそれをExcelにエクスポートする必要があるため、いくつかの手動感情のタグ付けを行います。たとえば。私は最初の行の行のリストの最初の要素に対して抽出されたセンテンスまたはセンテンスが必要です。 2行目の2番目の要素抽出文。上記のコードでは、複数の文がある場合、位置が変わります。 – Deepti