我想在Python中设计一个自定义的标记赋予器模块,让用户指定要用于输入的标记赋予器。例如,考虑以下输入:
Q: What is a good way to achieve this? A: I am not so sure. I think I will use Python.
我希望能够提供NLTK's sentence tokenization,sent_tokenize()
作为一个选项,因为它在很多情况下都能很好地工作,我不想重新发明轮子。除此之外,我还想提供一个更细粒度的标记化构建器(类似于规则引擎)。让我解释一下:
假设我提供了两个标记器:
SENTENCE # Tokenizes the given input by using sent_tokenize()
WORD # Tokenizes the given input by using word_tokenize()
QA # Tokenizes using a custom regular expression. E.g., Q: (.*?) A: (.*?)
我想支持以下规则:
因此,预期产出如下:
1。QA->;句子
[
('QUESTION',
('SENTENCE', 'What is a good way to achieve this?'),
),
('ANSWER',
('SENTENCE', 'I am not so sure', 'I think I will use Python')
)
]
2。质量保证
[
('QUESTION', 'What is a good way to achieve this?'),
('ANSWER', 'I am not so sure. I think I will use Python')
]
什么样的设计才能有效地实现这一点?
由于在Python中标记化很容易,我想知道您的模块计划提供什么。 我的意思是,当开始一个软件时,一个好的设计来自于考虑使用场景,而不是首先考虑数据结构。
您的预期输出示例有点混乱。 我假设您希望标记器在左侧返回名称,在右侧返回标记列表。 我玩了一点以获得类似的结果,但使用列表更容易处理:
顺便说一下,Python/Lib/tokenize.py(对于Python代码本身)可能值得一看如何处理事情。
如果我正确地理解了这个问题,那么我认为你应该重新发明轮子。我将为您想要的不同类型的标记化实现状态机,并使用python字典保存标记。
http://en.wikipedia.org/wiki/Finite-state_machine
示例状态机,它将获取一个带有空格的句子并打印出单词,当然您可以用更简单的方法来完成这个特定的示例!但一般来说,使用状态机,您可以获得线性时间性能,并且可以轻松地对其进行优化!
http://docs.python.org/2/library/collections.html#collections.Counter
然后您可以使用这个python数据结构来保存令牌。我觉得非常适合你的需要!
希望这能有所帮助。
相关问题 更多 >
编程相关推荐