2017-05-31 5 views
1

私は2列の文を含むCSVファイルを持っています。たとえば のためのtest.CSV:どのようにcsvファイルの各行を停止するには?

Col[1] 
---------------------- 
This trip was amazing. 

Col[2] 
-------------------- 
The cats are playing. 

ので、私はいくつかのNLPのプロセスをした:

with codecs.open('test.csv','r', encoding='utf-8', errors='ignore') as myfile: 
    data = csv.reader(myfile, delimiter=',') 
    next(data) 
    stops = set(stopwords.words("english")) 
    stemmer = PorterStemmer() 
    for row in data: 
     word_tokens1 = word_tokenize(row[1].lower()) 
     word_tokens2 = word_tokenize(row[2].lower()) 
     remo1 = [w for w in word_tokens1 if w in re.sub("[^a-zA-Z]"," ",w)] 
     remo2 = [w for w in word_tokens2 if w in re.sub("[^a-zA-Z]"," ",w)] 
     list1 = [w for w in remo1 if not w in stops] 
     list2 = [w for w in remo2 if not w in stops] 
     for w in list1: 
      l = stemmer.stem(w) 
      print(l) 
     for w in list2: 
      l2 = stemmer.stem(w) 
      print(l2) 

私は語幹ないとき私の問題であり、私はそれを印刷するとき:

trip 
amazi 
cat 
play 

それは各単語を一列に印刷します。どのように私は のような語幹の後の文に戻ることができます:

Col[1]: 
------------------- 
trip amazi 

Col[2]: 
------------------- 
cat play 
+0

ファイルのサンプルを表示できますか?私はなぜあなたがcsvパッケージを使用しているのだろうかと思います。私が見る限り、あなたは行を気にします。 csvでは、列はコンマで区切られます。行は改行で区切られています。 – MAZDAK

+0

それは違う色です。申し訳ありませんが、私はコードとして書いています。 –

+0

"この旅行はすごいよ、猫は遊んでいる"のように見えるのですか? – MAZDAK

答えて

0

をここであなたが望む出力を生成し、コードの修正版です。あなたがしなければならなかった最も重要なことは、list2ため

stemmed_first = "" 
      c = 0 
      for w in list1: 
       if c < len(list1)-1: 
        stemmed_first += stemmer.stem(w) + " " 
       else: 
        stemmed_first += stemmer.stem(w) 
       c += 1 

と同じに

for w in list1: 
      l = stemmer.stem(w) 
      print(l) 
     for w in list2: 
      l2 = stemmer.stem(w) 
      print(l2) 

を変えました。ただし、コード全体に小さな変更を加えました。

stemmer = PorterStemmer() 
stops = set(stopwords.words("english")) 

with open('test.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=',') 

    for row in spamreader: 
     if len(row) >= 2: 
      word_tokens1 = nltk.tokenize.word_tokenize(row[0]) 
      word_tokens2 = nltk.tokenize.word_tokenize(row[1]) 
      remo1 = [w for w in word_tokens1 if w in re.sub("[^a-zA-Z]", " ", w)] 
      remo2 = [w for w in word_tokens2 if w in re.sub("[^a-zA-Z]", " ", w)] 
      list1 = [w for w in remo1 if not w in stops] 
      list2 = [w for w in remo2 if not w in stops] 

      stemmed_first = "" 
      c = 0 

      for w in list1: 
       if c < len(list1)-1: 
        stemmed_first += stemmer.stem(w) + " " 
       else: 
        stemmed_first += stemmer.stem(w) 
       c += 1 

      stemmed_second = "" 
      c = 0 

      for w in list2: 
       if c < len(list2)-1: 
        stemmed_second += stemmer.stem(w) + " " 
       else: 
        stemmed_second += stemmer.stem(w) 
       c += 1 

      print stemmed_first 
      print stemmed_second 
関連する問題