我制作了两个函数来计算文本文件中的标点符号。这些标点符号是逗号,撇号,连字符和分号。逗号和分号的计算很简单,但是计算撇号和连字符比较复杂,因为我必须遵循某些规则(根据我的分配),例如我只能算一个单引号,如果它介于两个字母之间,例如in不应,不会等。因此,我将该任务分为两个功能:countpunc1()
和countpunc2()
。
在这两种方法的最后,我返回一个包含这些标点符号数量的字典。
然后在函数main()
中,我希望能够返回一个字典,该字典将countpunc1
和countpunc2
的结果组合成一个键:punctuations
。
示例显示在底部。
这是我的代码:
def countpunc1(text):
for ch in '0123456789abcdefghijklmnopqrstuvwxyz!"#$%&()*+./:<=>?@[\\]^_`{|}~-':
text = text.replace(ch, '')
words = text.replace('--', '').replace("'", '').split()
wordlist = list(words)
dictToReturn = {}
punctuations = [',', ';']
punclist = list(i for i in wordlist if i in punctuations)
for x in range(len(punctuations)):
dictToReturn[punctuations[x]] = dictToReturn.get(x,0)
for p in punclist:
dictToReturn[p] = dictToReturn.get(p,0) + 1
return dictToReturn
def countpunc2(text):
for ch in '!"#$%&()*+./:<=>?@[\\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.replace('--', ' ').split('\n')
wordlist = str(words)
punctuations = "'-"
dictToReturn = {}
letters = "abcdefghijklmnopqrstuvwxyz"
for i, char in enumerate(wordlist):
if i < 1:
continue
if i > len(wordlist) - 2:
continue
if char in punctuations:
if char not in dictToReturn:
dictToReturn[char] = 0
if wordlist[i-1] in letters and wordlist[i+1] in letters:
dictToReturn[char] += 1
return dictToReturn
def main(text):
text = open(text, 'r').read().lower()
profileDict = {}
# profileDict[punctuations] = ??
return profileDict
在上面第二行中,我尝试执行以下操作:
profileDict[punctuations] = countpunc1(text) + countpunc2(text)
和
profileDict[punctuations] = countpunc1(text).items() + countpunc2(text).items()
显然所有这些都是错误的,我得到了TypeError: unsupported operand type(s)
。
预期结果是这样的:
例如:dict[punctuations] = {",": 9, "'" : 0, ";" : 4, "-" : 11}
PS。当我在多个文本文件上对其进行测试时,该功能本身可以正常工作。