Comments (2)
from bllip-parser.
I am using pynaf to generate NAF output and I need to call naf_document.add_constituency_tree. Have decided to use extracted dependencies and walk up the tree. Sharing the code, with the hope that it is useful to someone.
def constituent_tree_to_naf(parent_node, parent_tid, is_parent_root):
# Depth first tree navigation
# This method will NOT be called with parent_node a preterminal. Hence it is assured that all the child_nodes are nonterminals.
global tid, terminals, ntid, non_terminals, edgeid, edges, direct_head_less, edge_idx
head_in_child = False
for child_node in parent_node.__iter__():
if parent_node.head().__str__() == child_node.__str__():
head_in_child = True
break
if not head_in_child:
direct_head_less.append((parent_node, None, True)) # Headless node, edge_id to put header attribute, if head is yet to be found
for child_node in parent_node.__iter__():
# non_terminals (constituent_id, constituent_Label)
ntid += 1
non_terminals.append(("nter" + str(ntid), child_node.label))
for i, dhl_t in enumerate(direct_head_less):
if dhl_t[2] and dhl_t[0].head().__str__() == child_node.__str__():
edges[dhl_t[1]] = edges[dhl_t[1]] + ("yes",)
direct_head_less[i] = (dhl_t[0], dhl_t[1], False)
# edges. (edge_id, from_id,to_id, head)
edgeid += 1
edge_idx += 1
if is_parent_root or parent_node.head().__str__() == child_node.__str__():
edges.append(("tre" + str(edgeid), "nter" + str(ntid), "nter" + str(parent_tid), "yes"))
else:
edges.append(("tre" + str(edgeid), "nter" + str(ntid), "nter" + str(parent_tid)))
if child_node.is_preterminal():
# terminals. (constituent_id, [term_id])
tid = tid + 1
terminals.append(("ter" + str(tid), ["t" + str(tid)])) # TODO: Check if there can be a situation where term_id <> terminal id
# edges. (edge_id, from_id,to_id, head)
edgeid += 1
edge_idx += 1
edges.append(("tre" + str(edgeid), "ter" + str(tid), "nter" + str(ntid)))
else: # non terminal, but not pre terminal
for i, dhl_t in enumerate(direct_head_less):
if dhl_t[2] and parent_node.__str__() == dhl_t[0].__str__():
direct_head_less[i] = (dhl_t[0], edge_idx, dhl_t[2])
constituent_tree_to_naf(child_node, ntid, False)
The calling method has this code (where tokens is the list of tokens and postags is the corresponding POS tags):
global tid, terminals, ntid, non_terminals, edgeid, edges, direct_head_less, edge_idx
tid = -1
ntid = -1
edgeid = -1
For each sentence
terminals = []
non_terminals = []
edges = []
direct_head_less = []
edge_idx = -1
ntid += 1
non_terminals.append(("nter" + str(ntid), "ROOT"))
constituency_lisp_string = str(rrp.parse_tagged(tokens, possible_tags=dict(enumerate(postags)))[0].ptb_parse)
tree = Tree(constituency_lisp_string)
head = tree.head()
constituent_tree_to_naf(tree, ntid, True)
naf_document.add_constituency_tree(non_terminals, terminals, edges)
from bllip-parser.
Related Issues (20)
- Facing WindowsError: [Error 32] error while running sd.sd.convert_tree HOT 4
- Can't pickle RerankingParser: attribute lookup RerankerModel on importlib._bootstrap failed
- MacOS: Compiled successfully, but module is missing HOT 3
- Biomedical named entities being treated as Cardinals HOT 2
- Will not compile on windows HOT 1
- bllip parser in Server HOT 3
- Handling quotes HOT 4
- python import failing with undefined symbol HOT 2
- Compilation in OSX HOT 1
- Error downloading model (501 Not Implemented) HOT 1
- Error downloading model (101 Network is unreachable) HOT 4
- slow results in docker HOT 2
- Segmentation fault in `InputTree::printproper` when using a comprehension or loop to collect the heads of parse trees HOT 1
- Compilation errors on windows: /usr/bin/sh: -c: line 0: syntax error near unexpected token `(' HOT 2
- pip install errors on linux (requires installing gcc & gxx) HOT 1
- Python3 bindings (pip) not working HOT 3
- Compilation error when installing from pip HOT 2
- Session crashes when loading RerankingParser.from_unified_model_dir() HOT 1
- AttributeError: type object 'CharniakParser' has no attribute 'loadModel' HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bllip-parser.