文件中第一行的Python split()未按预期工作



我有一个很大的文本文件,里面有数据挖掘的意见,每个意见都被分类为积极的、消极的、中立的或混合的。每一行都以"+"、"-"、"="或"*"开头,它们对应于这些分类器。此外,以"!!"开头的行表示要忽略的注释。

下面是一个简单的Python脚本,它只需要计算每个分类器并忽略注释行:

classes = [0, 0, 0, 0] # "+", "-", "=", "*"
f = open("All_Classified.txt")
for i, line in enumerate(f):
    line = line.strip()
    classifier = line.split(" ")[0]
    if classifier == "+": classes[0] += 1
    elif classifier == "-": classes[1] += 1
    elif classifier == "=": classes[2] += 1
    elif classifier == "*": classes[3] += 1
    elif classifier == "!!": continue
    else: print "Line "+str(i+1)+": ""+line+"""
f.close()
print classes

以下是"All_Classified.txt"前5行的示例:

!! GROUP 1, 1001 - 1512
= 1001//CD TITLETITLE//NNP How//WRB many//JJ conditioners/conditioner/NNS do//VBP you//PRP have//VBP ?//. 
= 1002//CD I//PRP have//VBP two//CD different//JJ kinds/kind/NNS ,//, Garnier//NNP Fructis//NNP Triple//NNP Nutrition//NNP conditioner//NN ,//, and//CC Suave//NNP coconut//NN .//. 
= 1003//CD But//CC I//PRP think//VBP I//PRP have//VBP about//IN 8//CD bottles/bottle/NNS of//IN the//DT Suave//NNP coconut//NN My//PRP$ mom//NN gave/give/VBD me//PRP a//DT bunch//NN for//IN Christmas//NNP because//IN she//PRP was/be/VBD getting/get/VBG tired/tire/VBN of//IN me//PRP saying/say/VBG I//PRP was/be/VBD out//IN 
= 1004//CD TITLETITLE//NNP Need//VB a//DT gel//NN that//IN works/work/NNS ,//, 8//CD mo//NN ,//, post//NN ,//, ready//JJ to//TO relax//VB edges/edge/NNS ,//, HELP//NNP ,//, 

无论出于什么原因,我的输出在第一次迭代中触发了else语句,就好像它不识别"!!"一样,我不知道为什么。我得到这个作为输出:

Line 1: "!! GROUP 1, 1001 - 1512"
[2986, 1034, 16278, 535]

此外,如果我从"All_Classified.txt"中删除第一行,那么它就无法识别第一行的"="。不确定必须做些什么才能将第一行识别为预期。

编辑(再次):正如Peter所问,如果我用else: print "Classifier "+classifier+ " Line "+str(i+1)+": ""+line+""":替换else: print "Line "+str(i+1)+": ""+line+""",这是输出

Classifier !! Line 1: "!! GROUP 1, 1001 - 1512"
[2986, 1034, 16278, 535]

编辑:使用xxd All_Classified.txt:的第一节

0000000: efbb bf21 2120 4752 4f55 5020 312c 2031  ...!! GROUP 1, 1
0000010: 3030 3120 2d20 3135 3132 0d0a 3d20 3130  001 - 1512..= 10
0000020: 3031 2f2f 4344 2054 4954 4c45 5449 544c  01//CD TITLETITL
0000030: 452f 2f4e 4e50 2048 6f77 2f2f 5752 4220  E//NNP How//WRB 

我怀疑您的输入文件不是看上去的样子。例如,classifier可能包含一些控制字符,这些字符在打印时不会显示(但会影响比较):

>>> classifier = '!!'
>>> print classifier
!!
>>> classifier == '!!'
False

编辑就在这里:

0000000: efbb bf21 2120
         ^^^^ ^^

它是UTF-8 BOM,它成为classifier的一部分。

尝试使用codecs.open()"utf-8-sig"作为编码打开文件(例如,https://stackoverflow.com/a/13156715/367273)。

相关内容

  • 没有找到相关文章

最新更新