2013-10-20 64 views
-2

我在文本文件中有一组句子,并且我将其中的动词标记为csv文件中的列标题。如果动词出现在该句子中,我需要在右栏下的特定单元格中标记'1'。 例如使用python写入csv中的特定单元格

如果我的判决是:我喜欢这部电影。

我的csv文件有标题:like,hate and loathe。

然后,我需要我的CSV文件看起来像提前

like  hate  loathe 
    1 

感谢。

这里是我曾尝试代码:

with open('verb.csv', 'wb') as csvn: 
    cwriter = csv.writer(csvn) 
    cwriter.writerow([d for d in verbs]) 

其中动词是我的动词列表。这会将动词打印为csv文件中的列标题。

for l, label in file: 
    t = nltk.word_tokenize(l) 
    tt = nltk.pos_tag(t) 
    for pos in tt: 
     for p in pos[1]: 
      c = 0 
      if(p == 'V'): 
       w = pos[0] 
       for l in verbs: 
        if w == l: 
         print(c) 
         continue 
        else: 
         c+=1 

现在W¯¯包含动词,我可以在动词列表中搜索匹配的单词,并获得它的位置,但我没有线索我如何能在CSV文件标记对应的位置我的Python版本是2.7。

+0

你应该尝试一些,然后问,你的Python版本也需要这个问题。有关goos的起点,请参阅python [docs](http://docs.python.org/2/library/csv.html)和此[post](http://stackoverflow.com/a/14693848/ 1982962)里面有一个很好的例子 –

+0

对不起,我会编辑我的帖子。 – GobSmack

回答

0

我会在创建计数器后创建一个空列表。该列表的长度与你的n个动词的长度相同。

c = 0 
emptylist = [""] * len(verbs) 

然后,当你通过你的动词列表运行,使用计数器(C)(顺便说一句,你确定它不是打印(L)你想在你的代码写?)作为空列表中的位置。我会改变以下部分:

if w == l: 
    print(c) 
    emptylist[c] = 1 
    ## then write emptylist to the csv with csv.writerow(emtptylist) 
    continue 
+0

谢谢,它工作。 – GobSmack

0

我会在您处理代码时推荐增量步骤。获得某些部分的工作,然后建立其余的部分。例如,从我们在这里可以看到的情况来看,当您尝试阅读file时,在第一行中应该有一个值错误,除非已经通过csv或其他内容解析了该错误。

在实际写入任何内容之前,您还应该生成要放入结果文件的所有输出。建立一本字典,我相信会奏效,然后在最后用所需的格式写出来。你不能真正回头写字符到文件的某些列中。你可以追加,但可能更好的是建立输出并在最后完成。

目前还不清楚您是否想为每个句子添加一行,或者总数是多少?空白行,如果没有字,或每列中为零?

您的目标是熟悉nltk还是仅仅获得所需的输出?

似乎只测试一个单词是否为in列表会更有效。 (if w in verbs将效率更高,以至于嵌套循环。)

您也在更改循环内的值l。使用不同的名称。

当你写出标题时,你不需要打破列表并且再次用列表理解来组装它。如果动词已经是一个列表,那么cwriter.writerow(verbs)应该没问题。

这里有太多的问题来解决一个答案,所以我会重复:婴儿的步骤。在尝试写出整个代码块之前,一次只能处理一个功能......使用大量的print语句来查看正在加载的值。

祝你好运!

+0

我需要为每个句子创建一个新行,并且可以使用0或空格。我需要以这种格式得到这个输出,以便我可以使用它进行进一步处理。实际上,我对python比较陌生。但我一定会按照你的意见,采取宝贝步骤,并感谢你。 – GobSmack

相关问题