CKIP E-HowNet

CKIP E-HowNet Tools

Author

Requirements

Installation

pip install -U ehownet

Usage

E-HowNet Parser

CLI

# Usage
ehn-parser <text> [<text> ...]

# Example
ehn-parser \
   "{MusicTool|樂器_x:predication={own|有:possession={按鈕|PushingButton:whole={x}}}}" \
   "{InstitutePlace|場所:telic={or({experiment|實驗:location={~}},{research|研究:location={~}})}}" \
   "TimePoint={},manner={urgent|急}"

Output:

 #1
 [Entity $x] MusicTool|樂器
 └── [Feature] predication
     └── [Entity] own|有
         └── [Feature] possession
             └── [Entity] 按鈕|PushingButton
                 └── [Feature] whole
                     └── $x

 #2
 [Entity] InstitutePlace|場所
 └── [Feature] telic
     └── [Entity]
         └── [Function] or
             ├── [Entity] experiment|實驗
             │   └── [Feature] location
             │       └── [TildeEntity]
             └── [Entity] research|研究
                 └── [Feature] location
                     └── [TildeEntity]

 #3
[Root]
├── [Feature] TimePoint
│   └── [AnyEntity]
└── [Feature] manner
    └── [Entity] urgent|急

Python API

from ehn.parse import EhnParser

text = '{MusicTool|樂器_x:predication={own|有:possession={按鈕|PushingButton:whole={x}}}}'

parser = EhnParser()
ress = parser(text, debug=False)
for res in ress:
   print(res)

Output:

[Entity $x] MusicTool|樂器
└── [Feature] predication
    └── [Entity] own|有
        └── [Feature] possession
            └── [Entity] 按鈕|PushingButton
                └── [Feature] whole
                    └── $x

License

CC BY-NC-SA 4.0

Copyright (c) 2018-2020 CKIP Lab under the CC BY-NC-SA 4.0 License.

E-HowNet Grammar

This section describes the grammar of the E-HowNet expression.

Text

  • TEXT

    • [A-Za-z0-9\x80-\U0010FFFF|+\-.]+

  • NUMBER

    • e.g. 1, 0.1, 1e-4

  • COINDEX

    • x[0-9]*

Node

Entity

Feature

Function

  • EhnParseFunction

    • TEXT()

    • TEXT(RESTRICTION)

    • TEXT(ENTITY)

    • TEXT(ENTITY,ENTITY)

    • TEXT(ENTITY,ENTITY,...)

Restriction

Valid Expressions

ENTITY or any number of FEATUREs joined by ,s.

  • ENTITY

  • FEATURE

  • FEATURE,FEATURE

  • FEATURE,FEATURE,...

Parse Nodes

There are five types of nodes in E-HowNet expression — Entity, Feature, Function, Restriction, and Root.

Inheritance diagram of ehn.parse.node.entity, ehn.parse.node.feature, ehn.parse.node.other

Major Nodes

class EhnParseNode

The prototype of E-HowNet parsing nodes.

head: str

The head of this node.

children()

Yields all direct child nodes of this node.

descendant()

Yields all descendant nodes (including self) of this node.

tree() → treelib.Tree

Generates a tree representation of this node and all its descendant nodes.

Entity

class EhnParseEntityBase

The base class of E-HowNet parsing entity nodes.

Subclasses:

property features

A list of Features.

Feature

class EhnParseFeatureBase

The base class of E-HowNet parsing feature nodes.

Subclasses:

property value

Can be either Entity or Restriction.

Function

class EhnParseFunctionBase

The base class of E-HowNet parsing function nodes.

Subclasses:

property arguments

A list of Entities or Restriction

Restriction

class EhnParseRestrictionBase

The base class of E-HowNet parsing function nodes.

Subclasses:

property value

Must be an Entity.

Root

class EhnParseRootBase

The base class of E-HowNet parsing root nodes. Works similar to entities but is not an entity. Used only in feature-based expressions.

Subclasses:

property features

A list of Features.

Partial Nodes

Function Head

class EhnParseFunctionHead

The base class of nodes with a function as its head.

Note that the attribute obj.head of this object obj returns obj.function.head.

Subclasses:

property function

Must be a Function.

Anchor Body

class EhnParseAnchorBody

The base class of anchor nodes.

Subclasses:

property anchor

The Anchor.

Anchor

class EhnParseAnchor

The coindex target.

head: str

The coindex of this anchor. Must be x[0-9]*.

ehn package

Subpackages

ehn.parse package

Subpackages

ehn.parse.node package

Please refer the tutorial “Parse Nodes”.

Submodules

ehn.parse.node.base module

Please refer the tutorial “Parse Nodes”.

class ehn.parse.node.base.EhnParseNode[source]

Bases: object

abstract children()[source]
descendant()[source]
tree()[source]
class ehn.parse.node.base.EhnParseEntityBase[source]

Bases: ehn.parse.node.base.EhnParseNode

class ehn.parse.node.base.EhnParseFeatureBase[source]

Bases: ehn.parse.node.base.EhnParseNode

class ehn.parse.node.base.EhnParseFunctionBase[source]

Bases: ehn.parse.node.base.EhnParseNode

class ehn.parse.node.base.EhnParseRestrictionBase[source]

Bases: ehn.parse.node.base.EhnParseNode

class ehn.parse.node.base.EhnParseRootBase[source]

Bases: ehn.parse.node.base.EhnParseNode

class ehn.parse.node.base.EhnParseAnchor(head=None)[source]

Bases: object

class ehn.parse.node.base.EhnParseStrHead(head)[source]

Bases: object

property head
class ehn.parse.node.base.EhnParseFunctionHead(function)[source]

Bases: object

property head
property function
class ehn.parse.node.base.EhnParseFeatureBody(*features)[source]

Bases: object

property features
add_feature(feature)[source]
class ehn.parse.node.base.EhnParseAnchorBody(anchor=None)[source]

Bases: object

property anchor
ehn.parse.node.entity module

Please refer the tutorial “Parse Nodes”.

class ehn.parse.node.entity.EhnParseNormalEntity(head, *features, anchor=None)[source]

Bases: ehn.parse.node.base.EhnParseEntityBase, ehn.parse.node.base.EhnParseStrHead, ehn.parse.node.base.EhnParseFeatureBody, ehn.parse.node.base.EhnParseAnchorBody

children()[source]
class ehn.parse.node.entity.EhnParseFunctionEntity(function, *features, anchor=None)[source]

Bases: ehn.parse.node.base.EhnParseEntityBase, ehn.parse.node.base.EhnParseFunctionHead, ehn.parse.node.base.EhnParseFeatureBody, ehn.parse.node.base.EhnParseAnchorBody

children()[source]
class ehn.parse.node.entity.EhnParseAnyEntity[source]

Bases: ehn.parse.node.base.EhnParseEntityBase

property head
children()[source]
class ehn.parse.node.entity.EhnParseNameEntity(head)[source]

Bases: ehn.parse.node.base.EhnParseEntityBase, ehn.parse.node.base.EhnParseStrHead

children()[source]
class ehn.parse.node.entity.EhnParseNumberEntity(head)[source]

Bases: ehn.parse.node.base.EhnParseEntityBase, ehn.parse.node.base.EhnParseStrHead

children()[source]
class ehn.parse.node.entity.EhnParseTildeEntity[source]

Bases: ehn.parse.node.base.EhnParseEntityBase

property head
children()[source]
class ehn.parse.node.entity.EhnParseCoindexEntity(head)[source]

Bases: ehn.parse.node.base.EhnParseEntityBase, ehn.parse.node.base.EhnParseStrHead

children()[source]
ehn.parse.node.feature module

Please refer the tutorial “Parse Nodes”.

class ehn.parse.node.feature.EhnParseFeatureCore(value)[source]

Bases: object

property value
class ehn.parse.node.feature.EhnParseNormalFeature(head, value)[source]

Bases: ehn.parse.node.base.EhnParseFeatureBase, ehn.parse.node.base.EhnParseStrHead, ehn.parse.node.feature.EhnParseFeatureCore

children()[source]
class ehn.parse.node.feature.EhnParseFunctionFeature(function, value)[source]

Bases: ehn.parse.node.base.EhnParseFeatureBase, ehn.parse.node.base.EhnParseFunctionHead, ehn.parse.node.feature.EhnParseFeatureCore

children()[source]
ehn.parse.node.other module

Please refer the tutorial “Parse Nodes”.

class ehn.parse.node.other.EhnParseRoot(*features)[source]

Bases: ehn.parse.node.base.EhnParseRootBase, ehn.parse.node.base.EhnParseFeatureBody

property head
children()[source]
class ehn.parse.node.other.EhnParseFunction(head, *arguments)[source]

Bases: ehn.parse.node.base.EhnParseFunctionBase, ehn.parse.node.base.EhnParseStrHead

property arguments
add_argument(argument)[source]
children()[source]
class ehn.parse.node.other.EhnParseRestriction(value, anchor=None)[source]

Bases: ehn.parse.node.base.EhnParseRestrictionBase, ehn.parse.node.base.EhnParseAnchorBody

property head
property value
children()[source]

Submodules

ehn.parse.parser module

exception ehn.parse.parser.EhnSyntaxError(*args, pos=None)[source]

Bases: SyntaxError

show_pos(text)[source]

Show error position.

Parameters

text (str) – original input text

class ehn.parse.parser.EhnLexer(**kwargs)[source]

Bases: ehn.parse.parser._EhnLexer

E-HowNet Lexer.

class ehn.parse.parser.EhnParser(lexer=None, **kwargs)[source]

Bases: ehn.parse.parser._EhnParser

E-HowNet Parser.

Index

Module Index