1

使用柯林斯头部规则从一个句子中获取词条的项目。

这是我得到的错误:

File "C:\Users\PC\Desktop\Python27\PyProject\src\Feature\FeatureExtractor.py", line 225, in collinsHeadExtractor
    if raw['whWord']=='whWord-what':
TypeError: 'NoneType' object has no attribute '__getitem__'

这是生成错误的代码部分:

def whoPattern(question):
            p1 = re.compile("^[w|W]ho (is|are|was|were)( the)*( \`\`)*( [A-Z][a-z]+)+( \'\')* \?$")
            if p1.match(question):
                return "HUM:desc"
            p2 = re.compile("^[w|W]ho (is|was) .*")
            if p2.match(question):
                return "Hum:ind"
        if training:
            file = DBStore.trainingRoot+"\\headword_question"+colName+".txt"
        else:
            file = DBStore.testingRoot+"\\headword_question"+colName+".txt"
        f = open(file,'r')
        p = re.compile(r"(?P<head>.+)::(?P<question>.+)")
        i = 0
        rawQuestions = DBStore.getDB()['raw'+colName]
        p2 = re.compile('\.')
        headWord = []
        for line in f:
            print iWor
            i = i + 1
            match = p.match(line)
            print match.group('question')
            head = p2.sub('',match.group('head'))
            question = match.group('question')
            raw = rawQuestions.find_one({'question':question})
            if raw['whWord']=='whWord-what':
                pattern = whatPattern(question)
            elif raw['whWord']=='whWord-who':
                pattern = whoPattern(question)
            else:
                pattern = None
            if head.isupper() and (pattern == "DESC:def_1" or pattern == 'DESC:def_2'):
                pattern = "ABBR:exp"
            if head == 'null':
                headWord = [None,pattern]
            elif pattern is None:
                headWord = [head,pattern]
            else:
                headWord = [None,pattern]
            rawQuestions.update({'question':question},{"$set":{"head":headWord}},safe=True,multi=True)

任何帮助解决这个问题都会很棒。谢谢!

4

1 回答 1

5

这意味着rawQuestions.find_one({'question':question})已经返回None

于 2013-01-28T21:55:01.497 回答