我正在为自然语言处理构建一个标记模型。最初,句子的单词被标记为词性(如名词的 NN),然后应用规则将它们划分为表示为嵌套列表的树。此过程会重复多次,直到您在顶层获得一个节点。我有一个所有潜在树的主列表,我需要消除重复的树,否则整个事情都会在内存中爆炸。这是列表包含的内容的一个小示例。我需要确保列表中的每个列表都是唯一的,因为每次迭代都会创建许多分支。
[[('NP', [('PRP', 'I')]), ('VBD', 'ate'), ('DT', 'a'), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
[('PRP', 'I'), ('VP', [('VBD', 'ate')]), ('DT', 'a'), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
[('PRP', 'I'), ('VBD', 'ate'), ('NP', [('DT', 'a')]), ('NN', 'steak'), ('IN', 'with'), ('DT', 'a'), ('NN', 'knife'), ('.', '.')]
...]
我想过使用一个集合,但列表不可散列。我尝试使用递归,但内存不足。我考虑将列表转换为字符串,使用字符串作为字典键和列表作为值,然后迭代并再次将其转换回列表(或将其保留为字典?)。有没有人有一个不那么骇人听闻的解决方案?我对 Python 比较陌生,所以请解释一下您的解决方案是如何工作的。
我应该澄清一下:嵌套列表可以无限深。树结构不是提前知道的,而是动态构建的。试图构建这样的东西 - http://jos.oxfordjournals.org/content/25/4/345/F23.large.jpg但以嵌套列表的形式。