-2

我在一个文本文件中有一组句子,我将其中的动词标记为 csv 文件中的列标题。如果动词出现在那个句子中,我需要在右列下的特定单元格中标记一个“1”。例如

如果我的句子是:我喜欢这部电影。

我的 csv 文件有标题:喜欢、讨厌和厌恶。

然后我需要我的 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 文件中的相应位置标记为 1。我的 python 版本是 2.7 .

4

2 回答 2

0

我建议您在处理代码时采取增量步骤。让某些部分工作,然后构建其余部分。例如,从我们在这里可以看到,当您尝试读取时,您的第一行应该有一个 Value 错误file,除非它已经被解析csv过。

在实际写入任何内容之前,您还应该生成要放入结果文件的所有输出。建立一个字典,我相信会起作用,结果,然后最后以你想要的格式写出来。您不能真正返回并将字符任意写入文件的某些列。您可以追加,但最好只建立输出并在最后执行。

不清楚您是要每个句子一行,还是总行,还是什么?如果没有单词,则为空行,或者每列为零?

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

似乎只测试一个单词是否是in一个列表会更有效。(if w in verbs将比嵌套循环更有效。)

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

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

这里有太多问题无法在一个答案中解决,所以我会重申:婴儿步骤。在你尝试写出整个代码块之前,让事情一次工作一个功能......使用大量print语句来查看正在加载的值。

祝你好运!

于 2013-10-20T09:00:17.140 回答
0

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

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

然后当你遍历你的动词列表时,使用计数器 (c) (顺便说一句,你确定它不是 print(l) 你想写在你的代码中吗?)作为空列表中的位置。我会更改以下部分:

if w == l:
    print(c)
    emptylist[c] = 1
    ## then write emptylist to the csv with csv.writerow(emtptylist)
    continue
于 2013-10-20T09:12:23.533 回答