A natural language semantic parser
Project description
===============================================
Parsetron - A natural language semantic parser
===============================================
.. pypi version and download:
.. image:: https://pypip.in/d/parsetron/badge.png
:target: https://pypi.python.org/pypi/parsetron
.. image:: https://travis-ci.org/Kitt-AI/parsetron.svg?branch=develop
:target: https://travis-ci.org/Kitt-AI/parsetron
.. image:: https://coveralls.io/repos/Kitt-AI/parsetron/badge.svg?branch=develop
:target: https://coveralls.io/r/Kitt-AI/parsetron?branch=develop
.. image:: https://readthedocs.org/projects/parsetron/badge/?version=latest
:alt: Documentation Status
:scale: 100%
:target: https://readthedocs.org/projects/parsetron/
A natural language semantic parser
Installation
------------
``pip install parsetron``
Parsetron is tested under Python 2.7 and Pypy. It doesn't support Python 3 yet.
Quick Start
-----------
The following is a grammar that parses natural language instruction on lights:
.. code-block:: python
from parsetron import Set, Regex, Optional, OneOrMore, Grammar, RobustParser
class LightGrammar(Grammar):
action = Set(['change', 'flash', 'set', 'blink'])
light = Set(['top', 'middle', 'bottom'])
color = Regex(r'(red|yellow|blue|orange|purple|...)')
times = Set(['once', 'twice', 'three times']) | Regex(r'\d+ times')
one_parse = action + light + Optional(times) + color
GOAL = OneOrMore(one_parse)
@staticmethod
def test():
parser = RobustParser((LightGrammar()))
sents = [
"set my top light to red",
"set my top light to red and change middle light to yellow",
"set my top light to red and change middle light to yellow and "
"flash bottom light twice in blue"
]
for sent in sents:
tree, result = parser.parse(sent)
assert result.one_parse[0].color == 'red'
print '"%s"' % sent
print "parse tree:"
print tree
print "parse result:"
print result
print
Dependencies
------------
None. Parsetron is a single ``parsetron.py`` file.
Parsetron is inspired by `pyparsing <https://pyparsing.wikispaces.com/>`_.
Grammar Modules
---------------
Parsetron supports modularized grammars: each grammar focuses on an individual
small domain and can be imported via, for instance:
.. code-block:: python
from parsetron.grammars.colors import ColorsGrammar
class YourCustomizedGrammar(Grammar):
color = ColorsGrammar.GOAL
You are welcome to contribute your own grammar here (under
``parsetron.grammars``). Send us a pull request!
Development
-----------
1. fork this repository
2. install dev-specific packages::
pip install -r requirements.txt
3. then make your changes and follow the ``Makefile``.
TODO
----
- [ ] Python 3 compatible
- [ ] Unicode support
Documentation
-------------
The full documentation is at http://parsetron.rtfd.org.
History
-------
0.1.1 (2015-08-24)
++++++++++++++++++
* ParseResult now supports lex_span() method.
0.1.0 (2015-06-19)
++++++++++++++++++
* First release on PyPI.
Parsetron - A natural language semantic parser
===============================================
.. pypi version and download:
.. image:: https://pypip.in/d/parsetron/badge.png
:target: https://pypi.python.org/pypi/parsetron
.. image:: https://travis-ci.org/Kitt-AI/parsetron.svg?branch=develop
:target: https://travis-ci.org/Kitt-AI/parsetron
.. image:: https://coveralls.io/repos/Kitt-AI/parsetron/badge.svg?branch=develop
:target: https://coveralls.io/r/Kitt-AI/parsetron?branch=develop
.. image:: https://readthedocs.org/projects/parsetron/badge/?version=latest
:alt: Documentation Status
:scale: 100%
:target: https://readthedocs.org/projects/parsetron/
A natural language semantic parser
Installation
------------
``pip install parsetron``
Parsetron is tested under Python 2.7 and Pypy. It doesn't support Python 3 yet.
Quick Start
-----------
The following is a grammar that parses natural language instruction on lights:
.. code-block:: python
from parsetron import Set, Regex, Optional, OneOrMore, Grammar, RobustParser
class LightGrammar(Grammar):
action = Set(['change', 'flash', 'set', 'blink'])
light = Set(['top', 'middle', 'bottom'])
color = Regex(r'(red|yellow|blue|orange|purple|...)')
times = Set(['once', 'twice', 'three times']) | Regex(r'\d+ times')
one_parse = action + light + Optional(times) + color
GOAL = OneOrMore(one_parse)
@staticmethod
def test():
parser = RobustParser((LightGrammar()))
sents = [
"set my top light to red",
"set my top light to red and change middle light to yellow",
"set my top light to red and change middle light to yellow and "
"flash bottom light twice in blue"
]
for sent in sents:
tree, result = parser.parse(sent)
assert result.one_parse[0].color == 'red'
print '"%s"' % sent
print "parse tree:"
print tree
print "parse result:"
print result
Dependencies
------------
None. Parsetron is a single ``parsetron.py`` file.
Parsetron is inspired by `pyparsing <https://pyparsing.wikispaces.com/>`_.
Grammar Modules
---------------
Parsetron supports modularized grammars: each grammar focuses on an individual
small domain and can be imported via, for instance:
.. code-block:: python
from parsetron.grammars.colors import ColorsGrammar
class YourCustomizedGrammar(Grammar):
color = ColorsGrammar.GOAL
You are welcome to contribute your own grammar here (under
``parsetron.grammars``). Send us a pull request!
Development
-----------
1. fork this repository
2. install dev-specific packages::
pip install -r requirements.txt
3. then make your changes and follow the ``Makefile``.
TODO
----
- [ ] Python 3 compatible
- [ ] Unicode support
Documentation
-------------
The full documentation is at http://parsetron.rtfd.org.
History
-------
0.1.1 (2015-08-24)
++++++++++++++++++
* ParseResult now supports lex_span() method.
0.1.0 (2015-06-19)
++++++++++++++++++
* First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
parsetron-0.1.1.tar.gz
(41.0 kB
view details)
Built Distribution
File details
Details for the file parsetron-0.1.1.tar.gz
.
File metadata
- Download URL: parsetron-0.1.1.tar.gz
- Upload date:
- Size: 41.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97324cec1bfc011e0728640fe16d46ee2cf064253863c7174aa5a8d329ffa980 |
|
MD5 | 24cee8fe079670c12ff1897fcccb2b80 |
|
BLAKE2b-256 | 5d85aa5a6c53471386f6d7a8502d6a172e146807cccd3026825d374a1f4f4888 |
File details
Details for the file parsetron-0.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: parsetron-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 35.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 769c21a4d3ae3434bdb5b74b82da4d9f87fe76f9e967830100ceddf946ae2b33 |
|
MD5 | aff9f3001349d7e40109927358b60426 |
|
BLAKE2b-256 | 8e1274a09e3a6bb03d8f926e2f58302276adfb23a9fe3def0d527021f0f22ec0 |