创建一个Set会提供与预期不同的输出

时间:2013-11-01 06:21:09

标签: python csv text-mining

我将两篇论文的处理数据合二为一。我想创建一个两个计数集,使用多少个不同的单词以及其他分析。但是,当我将它们组合起来并设置(整个)时,我只返回一组字母。我有下面的代码以及我得到的输出。我希望输出是所有使用的单词。

print set(entire)
set([' ', '1', '0', '3', '2', '5', '4', '6', '9', 'a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'h', 'k', 'j', 'm', 'l', 'o', 'n', 'p', 's', 'r', 'u', 't', 'w', 'v', 'y', 'x'])



from __future__ import division
import nltk
import csv
import re
from string import punctuation
import enchant
from enchant.checker import SpellChecker

dictionary = enchant.Dict("en_US")
chkr = SpellChecker("en_US")

with open('2012ShortAnswers.csv', 'rb') as csvfile:
    data = csv.reader(csvfile, delimiter=",")

    writer = csv.writer(open('2012output.csv', 'wb'))

    for row in data:

        row3 = row[3]
        row3 = row3.lower().replace('  ', ' ')
        row4 = row[4]
        row4 = row4.lower().replace('  ', ' ')

        row3 = row3.replace('\n', '')
        row4 = row4.replace('\n', '')

        for p in list(punctuation):
            row3 = row3.replace(p, '')
            row4 = row4.replace(p, '')

        entire = row3 + row4
        set(entire)

2 个答案:

答案 0 :(得分:0)

您正在处理每一行输入并覆盖所有前一行,所以最后,您的变量只反映最后一行。

您需要在进入循环myset = set()之前创建一个集合并在内部执行myset.add(row3),或者在循环内附加到列表中,然后在退出循环时生成集合。

另外,知道row3确实是数据的第4列,用逗号分隔,对吧?如果这是一篇文章,你还希望从csv读者那里获得什么?

答案 1 :(得分:0)

row3row4是字符串。你决不会把它们分成单词。当您对字符串执行set时,它会在字符串中生成一组字符。

或许尝试row3 = row3.split(),同样尝试第4行,然后执行set(row3+row4)

但是,这不会真正解决它,因为现在你没有做任何事情。您应该在循环外创建一些其他集合,并在每次循环迭代时添加它。现在你在每次迭代时创建一个集合,但只是扔掉它。