TypeError:无法排序的类型:int()<str()

时间:2019-09-16 08:26:52

标签: python python-3.x

当我在JSON新闻数据集上应用5W1H提取器(Git中的一个开源库)时发生错误。

尝试运行时,该错误发生在Evaluation_location文件中

raw_locations.sort(key=lambda x: x[1], reverse=True)

然后控制台给出错误提示

TypeError: unorderable types: int() < str()

我的问题是:这是否意味着我的数据集格式有问题?但是如果是这样,那么在提取器处理该语料库时,是否不应该将所有新闻数据视为一个简单的长字符串?我很想寻找解决这个问题的方法。

这是json新闻数据之一:

{ “标题”:“足球:范·迪克,罗纳尔多和梅西入围国际足联大奖”, 利物浦中后卫范吉尔(Virgil van Dijk)入围决赛,将国际足联最佳球员奖添加到他的UEFA年度最佳球员荣誉中。 9月23日,同样的三人组也将参加在米兰宣布的FIFA大奖赛。范·迪克(Van Dijk)出演了利物浦(Liverpool)夺冠的冠军联赛。英格兰中后卫露西·青铜(Lucy Bronze)赢得了UEFA的女足奖,并且在FIFA的入围名单中与美国世界杯冠军二人组合梅根·拉皮诺(Megan Rapinoe)和亚历克斯·摩根(Alex Morgan)曼彻斯特城老板瓜迪奥拉(Pep Guardiola)与利物浦的尤尔根·克洛普(Jurgen Klopp)和托特纳姆热刺的毛里西奥·波切蒂诺(Mauricio Pochettino)争夺最佳男篮主教练。女足教练奖由美国的吉尔·埃利斯(Jill Ellis)和萨琳娜·威格曼(Sarina Wiegman)带领,欧洲冠军荷兰队晋级了世界杯决赛。莱昂内尔·梅西(巴塞罗那/阿根廷),维吉尔·范·迪克(Virgil van Dijk)球员:露西·青铜(里昂/英格兰),亚历克斯·摩根(奥兰多·普赖德/美国),梅根·拉皮诺(Reign FC /美国)男子教练:佩普·瓜迪奥拉(曼彻斯特城),尤尔根·克洛普(利物浦),毛里西奥·波切蒂诺(热刺)女教练:吉尔·埃利斯(美国),菲尔·内维尔(英格兰),萨琳娜·威格曼(荷兰)妇女的门将:克里斯蒂安·恩德勒(巴黎圣日耳曼/智利),赫德维格·林达尔(沃尔夫斯堡/瑞典) ,萨里·范·芬纳达尔(Sari van Veenendaal)(马德里竞技/荷兰)男子的守门员:阿里森(利物浦/巴西),埃德森(曼彻斯特城/巴西),马克·安德烈·特·史泰根(巴塞罗那/德国)普斯卡斯奖(最佳进球):莱昂内尔·梅西(巴塞罗那) v Real Betis),Juan Quintero(内河板v赛车俱乐部),Daniel Zsori(德布勒森v Ferencvaros)”, “ published_at”:“ 2019-09-02”, }

json_file = open("./Labeled.json","r",encoding="utf-8")
data = json.load(json_file)

if __name__ == '__main__':
    # logger setup
    log = logging.getLogger('GiveMe5W')
    log.setLevel(logging.DEBUG)
    sh = logging.StreamHandler()
    sh.setLevel(logging.DEBUG)
    log.addHandler(sh)

    # giveme5w setup - with defaults
    extractor = MasterExtractor()
    Document() 

for i in range(0,1000):
    body = data[i]["body"]
    #print(body)
    #for line in body:
    #print(line[0:line.find('\n')])
    #head = re.sub("[^A-Z\d]", "", "")
    head = re.search("^[^\n]*", body).group(0)
    head = str(head)

    title = data[i]["title"]
    title = str(title)

    body = data[i]["body"]
    body = str(body)

    published_at = data[i]["published_at"]
    published_at = str(published_at)

    doc1 = Document(title,head,body,published_at)


    doc = extractor.parse(doc1)

代替返回提取的时间和位置结果,它给了我这个错误:

 Traceback (most recent call last):   File
 "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
     self.run()   File "/usr/local/lib/python3.5/dist-packages/Giveme5W1H/extractor/extractor.py",
 line 20, in run
     extractor.process(document)   File "/usr/local/lib/python3.5/dist-packages/Giveme5W1H/extractor/extractors/abs_extractor.py",
 line 41, in process
     self._evaluate_candidates(document)   File "/usr/local/lib/python3.5/dist-packages/Giveme5W1H/extractor/extractors/environment_extractor.py",
 line 75, in _evaluate_candidates
     locations = self._evaluate_locations(document)   File "/usr/local/lib/python3.5/dist-packages/Giveme5W1H/extractor/extractors/environment_extractor.py",
 line 224, in _evaluate_locations
     raw_locations.sort(key=lambda x: x[1], reverse=True) TypeError: unorderable types: int() < str()

1 个答案:

答案 0 :(得分:0)

row_locations是在第219行的同一文件中构建的:

raw_locations.append([parts, location.raw['place_id'], location.point, bb, area, 0, 0, candidate, 0])

因此,排序功能尝试按位置place_id对位置进行排序。请检查您的数据集是否包含place_id的字符串和数字。如果是这样,则需要将所有条目转换为一种类型。