2017-04-01 18 views
0

非常に特有の問題があります。 extract関数は、XMLファイルを受け取り、レストランのレビューをキーとして使用して辞書を生成します。ここでは、テキストをトークン化し、句読点が削除され、辞書に再挿入される前に「トークン化されていません」というように、テキストに基本的な前処理を行っています。なぜ辞書処理キーを失う前処理ですか?

import string 
from nltk.tokenize import word_tokenize, RegexpTokenizer 
tokenizer = RegexpTokenizer(r'\w+') 

def preprocess(file): 
    d = extract(file) 
    for text in list(d.keys()): 
     tokenized_text = tokenizer.tokenize(text) 
     text2 = ''.join([" "+i if not i.startswith("'") and i not in string.punctuation else i for i in tokenized_text]).strip() 
     d[text2] = d.pop(text) 
    return d 

675件のレビューのうち、この機能を実行すると2件が見つかりませんでした。これらは「素晴らしいサービス」です。と「おいしい」。私は完全な停止が最初から取り除かれるべきであることを除いて、それらがそのまま返されることを期待するでしょう。参考のため

extract機能:

from collections import OrderedDict, defaultdict 
import xml.etree.ElementTree as ET 

def extract(file): 

    tree = ET.parse(file) 
    root = tree.getroot() 

    if file == 'EN_REST_SB1_TEST.xml': 
     d = OrderedDict() 
     for sentence in root.findall('.//sentence'): 
      opinion = sentence.findall('.//Opinion') 
      if opinion == []: 
       text = sentence.find('text').text 
       d[text] = 0 

     return d 

誰もがSemEval ABSA作業に精通している場合、あなたは私がいないIDタグを利用して、多少遠回りでこれをやった注意しましょうXMLで私はそれをやった方法に固執することを好むだろう。

+1

あなたはレビューをキーとして使用しています。これは、重複を失うことを意味します。これらの*非常に*短いレビューが2回起こったことがありますか? – alexis

+0

はい - それです。非常に明白な今私はそれを考える。何が最良の選択肢でしょうか? – user3058703

+0

自分の目標に合うようにあなたのアプローチを修正する。私はちょうどリストでそれらを収集するだろうが、私はあなたが達成しようとしているもの、なぜあなたがキーとして値を使用しているのか、または重複が失われることを気にする理由を知らないので、たぶん**新しい質問をお願いします** **仕事を説明し、正しいデータ構造を尋ねますか? – alexis

答えて

1

あなたはキーとしてレビューを使用しています。つまり、重複を失うことになります。明らかに、これらの非常に短いレビューは2回発生しました。

レビューをキーとして使用する理由は考えられません。特に、重複しないように気をつけてください。それでリストに集めてみませんか?

+0

XMLのsentence id属性をキーとして使用しましたが、これは最初からやっていたはずです。ご協力ありがとうございました! – user3058703