SORRY - Lepl không còn được phát triển nữa.
Ngoài ra còn có LEPL - http://www.acooke.org/lepl
Dưới đây là một giải pháp nhanh chóng tôi đã viết trong bữa sáng:
pl6 src: python3
Python 3.1 (r31:73572, Oct 24 2009, 05:39:09)
[GCC 4.4.1 [gcc-4_4-branch revision 150839]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lepl import *
>>>
>>> class Alternatives(Node):
... pass
...
>>> class Query(Node):
... pass
...
>>> class Text(Node):
... pass
...
>>> def compile():
... qualifier = Word() & Drop(':') > 'qualifier'
... word = ~Lookahead('OR') & Word()
... phrase = String()
... text = phrase | word
... word_or_phrase = (Optional(qualifier) & text) > Text
... space = Drop(Space()[1:])
... query = word_or_phrase[1:, space] > Query
... separator = Drop(space & 'OR' & space)
... alternatives = query[:, separator] > Alternatives
... return alternatives.string_parser()
...
>>> parser = compile()
>>>
>>> alternatives = parser('all of these words "with this phrase" '
... 'OR that OR this site:within.site '
... 'filetype:ps from:lastweek')[0]
>>>
>>> print(str(alternatives))
Alternatives
+- Query
| +- Text
| | `- 'all'
| +- Text
| | `- 'of'
| +- Text
| | `- 'these'
| +- Text
| | `- 'words'
| `- Text
| `- 'with this phrase'
+- Query
| `- Text
| `- 'that'
`- Query
+- Text
| `- 'this'
+- Text
| +- qualifier 'site'
| `- 'within.site'
+- Text
| +- qualifier 'filetype'
| `- 'ps'
`- Text
+- qualifier 'from'
`- 'lastweek'
>>>
tôi cho rằng LEPL không phải là một "đồ chơi" - mặc dù nó là gốc đệ quy, nó bao gồm memoisation và trampolining, giúp tránh một số hạn chế của cách tiếp cận đó.
Tuy nhiên, nó là tinh khiết Python, vì vậy nó không phải siêu nhanh, và nó đang trong phát triển tích cực (một phiên bản mới, 4,0, với một vài sửa lỗi và cải tiến, đang đến tương đối sớm).
Nguồn
2010-03-03 12:19:12
Bạn có thể muốn có một cái nhìn tại Apache Lucene . Theo hiểu biết của tôi, nó làm một cái gì đó khá giống nhau, mặc dù nó là trong Java, không phải Python (mặc dù bạn có thể giao tiếp với nó bằng cách sử dụng Jython). –