我在一个文本文件中有一组句子,我将其中的动词标记为csv文件中的列标题。如果该句子中存在动词,我需要在右栏下的特定单元格中标记“1”。 e.g。
如果我的判决是:我喜欢这部电影。
我的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。
答案 0 :(得分:0)
在处理代码时,我建议使用增量步骤。让某些部件工作,然后在其余部分进行构建。例如,根据我们在此处看到的内容,当您尝试读入file
时,第一行应该存在值错误,除非已经csv
或其他内容解析过。
在实际向其中写入任何内容之前,您还应该生成要放入结果文件的所有输出。建立一个字典,我相信会有效,结果然后最后以你想要的格式写出来。您无法真正返回并将字符任意写入文件的某些列。你可以附加,但最好只是建立输出并在最后完成。
目前尚不清楚每个句子是否需要一行,或者总计还是什么?如果没有单词,或者每列中都为零,则为空行?
您的目标是熟悉nltk
,还是获得所需的输出?
似乎只测试一个单词是in
列表会更有效率。 (if w in verbs
将比嵌套循环更有效。)
您还在循环中更改l
的值。使用其他名称。
当你写出标题时,你不需要打破列表并用列表理解再次组装它。如果动词已经是一个列表,cwriter.writerow(verbs)
应该没问题。
这里有太多问题需要解决,所以我会重复一遍:宝贝步骤。在尝试写出整个代码块之前,一次使用一个功能...使用大量print
语句来查看正在加载的值。
答案 1 :(得分: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