我是编程和Python的新手。我想问一些新手问题。我有一个excel文件,列中有单词。我想阅读那些单词,在另一个excel文件中生成同义词。以下是我想从excel中读取的文字:
| A | B | C
1 | mankind | liquid | air
2 | professor | steam | haze
3 | name | kind | awkward
4 | went | save | enemy
这是我的代码:`
import nltk
import xlrd
import csv
import xlwt
import xlsxwriter
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
workbook = xlrd.open_workbook('C:\\Users\\runeza\Desktop\database.xlsx')
sheet_names = workbook.sheet_names()
sheet = workbook.sheet_by_name(sheet_names[0])
row_idx = 0
for col_idx in range(sheet.ncols):
for row_idx in range(sheet.nrows):
cell = sheet.cell(row_idx, col_idx).value #read content in column cell
synonyms = []
for syn in wordnet.synsets(cell):
for l in syn.lemmas():
synonyms.append(l.name())
a = (set(synonyms))
#print (a)
wb = xlwt.Workbook()
ws = wb.add_sheet("test")
for i, col in enumerate(a):
for j, row in enumerate(col):
ws.write(i, j, col)
wb.save("sample.xls")
`
但是,此代码不会翻译所有单词。在输出excel中,它只打印出最后一个单词,并根据字母数重复每列中的单词。
答案 0 :(得分:1)
我认为问题在于你要覆盖你在内循环的每个循环中创建的工作表,这就是为什么你只看到最后一个单词的原因。字母数的重复可能是由于这一行for j, row in enumerate(col):
,col可能是一个字符串,你循环遍历字符数并在该循环中写入单元格。
我对你的代码做了一些修改,现在应该把你的表单中的每个单词替换成逗号分隔的所有同义词。
wb = xlwt.Workbook()
ws = wb.add_sheet("test")
for col_idx in range(sheet.ncols):
for row_idx in range(sheet.nrows):
cell = sheet.cell(row_idx, col_idx).value #read content in column cell
synonyms = []
for syn in wordnet.synsets(cell):
for l in syn.lemmas():
print(l.name())
synonyms.append(l.name())
ws.write(row_idx, col_idx, ",".join(synonyms))
wb.save("sample.xls")
请注意,我在任何循环之外创建输出文件一次,而我仅ws.write
次sheet.ncols * sheet.nrows
次。