* Work on beam parser

This commit is contained in:
Matthew Honnibal 2014-11-20 19:49:33 +11:00
parent 5c3016bac8
commit 80baa2e3db
3 changed files with 22 additions and 16 deletions

View File

@ -57,7 +57,7 @@ exts = [
Extension("spacy.ner._state", ["spacy/ner/_state.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.bilou_moves", ["spacy/ner/bilou_moves.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.io_moves", ["spacy/ner/io_moves.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.greedy_parser", ["spacy/ner/greedy_parser.pyx"], language="c++", include_dirs=includes),
#Extension("spacy.ner.greedy_parser", ["spacy/ner/greedy_parser.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.pystate", ["spacy/ner/pystate.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.context", ["spacy/ner/context.pyx"], language="c++", include_dirs=includes),
Extension("spacy.ner.feats", ["spacy/ner/feats.pyx"], language="c++", include_dirs=includes),

View File

@ -10,4 +10,6 @@ cdef int copy_state(Pool mem, State* dest, State* source) except -1
cdef bint entity_is_open(State *s) except -1
cdef bint entity_is_sunk(State *s, Move* golds) except -1
cdef int entity_is_sunk(State *s, Move* golds) except -1
cdef int is_done(State* s) except -1

View File

@ -1,11 +1,14 @@
cdef void begin_entity(State* s, label):
from libc.string cimport memcpy
cdef int begin_entity(State* s, label) except -1:
s.j += 1
s.ents[s.j].start = s.i
s.ents[s.j].tag = label
s.ents[s.j].end = s.i + 1
cdef void end_entity(State* s):
cdef int end_entity(State* s) except -1:
s.ents[s.j].end = s.i + 1
@ -16,22 +19,22 @@ cdef State* init_state(Pool mem, int sent_length) except NULL:
s.length = sent_length
cdef bint entity_is_open(State *s):
cdef bint entity_is_open(State *s) except -1:
return s.ents[s.j].start != 0
cdef bint entity_is_sunk(State *s, Move* golds):
cdef int entity_is_sunk(State *s, Move* golds) except -1:
if not entity_is_open(s):
return False
cdef Entity* ent = &s.ents[s.j]
cdef Move* gold = &golds[ent.start]
if gold.action != BEGIN and gold.action != UNIT:
return True
elif gold.label != ent.label:
return True
else:
return False
raise StandardError
#cdef Entity* ent = &s.ents[s.j]
#cdef Move* gold = &golds[ent.start]
#if gold.action != BEGIN and gold.action != UNIT:
# return True
#elif gold.label != ent.label:
# return True
#else:
# return False
cdef int copy_state(Pool mem, State* dest, State* source) except -1:
@ -47,4 +50,5 @@ cdef int copy_state(Pool mem, State* dest, State* source) except -1:
dest.curr = source.curr
cdef int is_done(State* s) except -1:
return s.i >= s.length and not entity_is_open(s)