La extracción de relación NLTK no devuelve nada

Recientemente estoy trabajando en el uso de nltk para extraer la relación del texto. entonces construyo un texto de muestra: "Tom es el cofundador de Microsoft". y usando el siguiente programa para probar y no devolver nada. No puedo entender por qué.

Estoy usando la versión NLTK: 3.2.1, la versión de Python: 3.5.2.

Aquí está mi código:

import re
import nltk
from nltk.sem.relextract import extract_rels, rtuple
from nltk.tokenize import sent_tokenize, word_tokenize


def test():
    with open('sample.txt', 'r') as f:
        sample = f.read()   # "Tom is the cofounder of Microsoft"

    sentences = sent_tokenize(sample)
    tokenized_sentences = [word_tokenize(sentence) for sentence in sentences]
    tagged_sentences = [nltk.tag.pos_tag(sentence) for sentence in tokenized_sentences]

    OF = re.compile(r'.*\bof\b.*')

    for i, sent in enumerate(tagged_sentences):
        sent = nltk.chunk.ne_chunk(sent) # ne_chunk method expects one tagged sentence
        rels = extract_rels('PER', 'GPE', sent, corpus='ace', pattern=OF, window=10) 
        for rel in rels:
            print('{0:<5}{1}'.format(i, rtuple(rel)))

if __name__ == '__main__':
    test()
1. Después de alguna depuración, si descubrí que cuando cambié la entrada como

"Gates nació en Seattle, Washington, el 28 de octubre de 1955".

La salida nltk.chunk.ne_chunk () es:

(S (PERSON Gates / NNS) nació / VBD nació / VBN in / IN (GPE Seattle / NNP), /, (GPE Washington / NNP) el / IN octubre / NNP 28 / CD, /, 1955 / CD ./. )

La prueba () devuelve:

[PER: 'Gates / NNS'] 'nació / nació VBD / VBN in / IN' [GPE: 'Seattle / NNP']

2. Después de cambiar la entrada como:

"Gates nació en Seattle el 28 de octubre de 1955".

La prueba () no devuelve nada.

3. Excavé ennltk / sem / relextract.py y encontrar esto extraño

la salida es causada por la función:semi_rel2reldict (pares, ventana = 5, rastreo = Falso), que devuelve el resultado solo cuando len (pares)> 2, y es por eso que cuando una oración con menos de tres NEs devolverá Ninguno.

¿Es esto un error o usé NLTK de manera incorrecta?

Respuestas a la pregunta(2)

Su respuesta a la pregunta