Comprehensive Persian Verb Inflector
Project description
CPVI (Comprehensive Persian Verb Inflector)
CPVI (Comprehensive Persian Verb Inflector) is a Persian Verb Inflector. PVI uses Dual Mechanism theory (Words & Rules theory) to inflect Persian verbs.
Installation
>>> pip install CPVI
Usage
CPVI
class has only a profiling
method.
The profiling
method returns the profile of the verb passed as a argument. The profile consists of these properties:
- lexical aspect (action/state/accomplishment/achievement)(just for irregular verbs)
- regularity (regular/irregular/alternative);
- transitivity (transitive/intransitive);
- present dual (True/False);
- past dual (True/False);
- formal IPA present stem;
- formal IPA past stem;
- formal Persian present stem;
- formal Persian past stem;
- informal IPA present stem;
- informal IPA past stem;
- informal Persian present stem;
- informal Persian past stem;
- paradigm (inflected forms of the verb)
profiling
accepts 3 arguments:
word
: The Persian form of the word that you want to be inflected as a verb. The main assumption here is that users pass either present stem, past stem, or gerund.API_form
: The IPA form of the word; it is optional and the default value is an empty string. Non-Persian-IPA characters raise TypeError.space
: The type of space you want to be placed between inflected words and affixes; it is optional and the default value is ZWNJ (\u200c).
>>> from CPVI import CPVI
>>> profile = CPVI()
>>> profile.profiling(word='آمد', API_form='ʔɒmæd', space='\u200c')
{'lexical aspect': 'accomplishment',
'regularity': 'irregular',
'transitivity': 'intransitive',
'present dual': False,
'past dual': False,
'formal IPA present stem': 'ʔɒ',
'formal IPA past stem': 'ʔɒmæd',
'formal Persian present stem': 'آ',
'formal Persian past stem': 'آمد',
'informal IPA present stem': 'ʔɒ',
'informal IPA past stem': 'ʔumæd',
'informal Persian present stem': 'آ',
'informal Persian past stem': 'اومد',
'paradigm': {
'formal': {
'IPA': {
'affirmative': {
'present': {
'simple': {
's1': 'ʔɒjæm',
's2': 'ʔɒji',
's3': 'ʔɒjæd',
'p1': 'ʔɒjim',
'p2': 'ʔɒjid',
'p3': 'ʔɒjænd'
},
'continuous': {
's1': 'mijɒjæm',
's2': 'mijɒji',
's3': 'mijɒjæd',
'p1': 'mijɒjim',
'p2': 'mijɒjid',
'p3': 'mijɒjænd'
},
'subjunctive': {...},
'progressive': {...},
'perfect': {...},
'perfect past': {...},
'imperative': {...}
},
'past': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': {...},
'perfect': {...},
'perfect subjunctive': {...}
},
'future': {
'simple': {...}
}
},
'negative': {
'present': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': None,
'perfect': {...},
'perfect past': {...},
'imperative': {...}
},
'past': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': None,
'perfect': {...},
'perfect subjunctive': {...}
},
'future': {
'simple': {...}
}
}
},
'Persian': {
'affirmative': {
'present': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': {...},
'perfect': {...},
'perfect past': {...},
'imperative': {...}},
'past': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': {...},
'perfect': {...},
'perfect subjunctive': {...}
},
'future': {
'simple': {...}
}
},
'negative': {
'present': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': None,
'perfect': {...},
'perfect past': {...},
'imperative': {...}
},
'past': {
'simple': {...},
'continuous': {...},
'subjunctive': {...},
'progressive': None,
'perfect': {...},
'perfect subjunctive': {...}
},
'future': {
'simple': {...}
}
}
}
},
'informal': {...}
}
profiling
returns a nested dictionary. The paradigm
key is a nested hierarchical dictionary containing all the inflected forms. The hierarchy consists of 6 layers. Use the hierarchy to navigate through the dictionary.
- The first layer is formality which is either
formal
orinformal
. - The second layer is the type of alphabet which is either
Persian
orIPA
. - The third layer is polarity which is either
affirmative
ornegative
. - The fourth layer is tense which is either
past
,present
, orfuture
. - The fifth layer for past tense is either
simple
,continuous
,subjunctive
,progressive
,perfect
, orperfect subjunctive
. The fifth layer for present tense is eithersimple
,continuous
,subjunctive
,progressive
,perfect
,perfect past
, orimperative
. The fifth layer for future tense is justsimple
. - The sixth layer is Person and number which is either
s1
,s2
,s3
,p1
,p2
, orp3
.
>>> p = CPVI()
>>> profile = p.profiling('گفت', 'Ɉoft', '\u200c')
# navigate to informal inflections
>>> profile['paradigm']['informal']
{'IPA': {
'affirmative': {
'present': {
'simple':{
's1'
...
...
...
# navigate to informal Persian alphabet inflections
>>> profile['paradigm']['informal']['Persian']
{'affirmative': {
'present': {
'simple':{
's1'
...
...
...
# navigate to informal Persian negative inflections
>>> profile['paradigm']['informal']['Persian']['negative']
{'present': {
'simple':{
's1'
...
...
...
# navigate to informal Persian negative present inflections
>>> profile['paradigm']['informal']['Persian']['negative']['present']
{'simple':{
's1'
...
...
...
# navigate to informal Persian negative simple present inflections
>>> profile['paradigm']['informal']['Persian']['negative']['present']['simple']
{'s1': 'نگم',
's2': 'نگی',
's3': 'نگه',
'p1': 'نگیم',
'p2': ['نگین', 'نگید'],
'p3': 'نگن'}
# navigate to the plural second person of informal Persian negative simple presents inflections
>>> profile['paradigm']['informal']['Persian']['negative']['present']['simple']['p2']
['نگین', 'نگید']
Because of the gramatical restrictions, some inflectional paradigms do not have inflected form, as demonstrated in the following code:
>>> profile['paradigm']['informal']['Persian']['negative']['past']['progressive']
None
In dual verbs, each paradigm has two set of inflected forms enclosed in a list, as demonstrated in the following:
>>> p = CPVI()
>>> profile = p.profiling('گسل', 'Ɉosæl', '\u200c')
>>> profile['paradigm']['informal']['Persian']['affirmative']['past']['simple']
[
{
's1': 'گسستم',
's2': 'گسستی',
's3': ['گسست', 'گسستش'],
'p1': 'گسستیم',
'p2': ['گسستین', 'گسستید'],
'p3': 'گسستن'
},
{
's1': 'گسیختم',
's2': 'گسیختی',
's3': ['گسیخت', 'گسیختش'],
'p1': 'گسیختیم',
'p2': ['گسیختین', 'گسیختید'],
'p3': 'گسیختن'
}
]
The API_form
argument only accepts Persian IPA alphabet. If you are not familiar with IPA alphabet, use CPVI.IPA
to see the mapping between IPA and Persian alphabet:
>>> CPVI.IPA
{
'b': 'ب',
'p': 'پ',
'f': 'ف',
'v': 'و',
't': ['ت', 'ط'],
'd': 'د',
's': ['س', 'ص', 'ث'],
'z': ['ز', 'ض', 'ظ', 'ذ'],
'ʃ': 'ش',
'ʒ': 'ژ',
'ʤ': 'ج',
'ʧ': 'چ',
'c': 'ک',
'Ɉ': 'گ',
'x': 'خ',
'G': ['ق', 'غ'],
'h': ['ه', 'ح'],
'ʔ': ['ع', 'همزه'],
'm': 'م',
'n': 'ن',
'r': 'ر',
'l': 'ل',
'j': 'ی',
'ɒ': ['آ', 'ا'],
'u': 'او',
'i': 'ی',
'æ': 'فتحه',
'e': 'کسره',
'o': 'ضمه'
}
None-IPA characters raise TypeError
.
The space between words and affixes could be adjusted by passing either space, ZWNJ (\u200c), or empty string as the space
argument:
# demostrate ZWNJ as the space argument
>>> p = CPVI()
>>> profile = p.profiling('گفت', 'Ɉoft', '\u200c')
>>> profile['paradigm']['formal']['Persian']['negative']['present']['perfect past']
{
's1': 'نگفتهبودهام',
's2': 'نگفتهبودهای',
's3': 'نگفتهبودهاست',
'p1': 'نگفتهبودهایم',
'p2': 'نگفتهبودهاید',
'p3': 'نگفتهبودهاند'
}
# demostrate space as the space argument
>>> profile = p.profiling('گفت', 'Ɉoft', ' ')
>>> profile['paradigm']['formal']['Persian']['negative']['present']['perfect past']
{
's1': 'نگفته بوده ام',
's2': 'نگفته بوده ای',
's3': 'نگفته بوده است',
'p1': 'نگفته بوده ایم',
'p2': 'نگفته بوده اید',
'p3': 'نگفته بوده اند'
}
# demostrate empty string as the space argument
>>> profile = p.profiling('گفت', 'Ɉoft', '')
>>> profile['paradigm']['formal']['Persian']['affirmative']['present']['progressive']
{
's1': 'دارممیگویم',
's2': 'داریمیگویی',
's3': 'داردمیگوید',
'p1': 'داریممیگوییم',
'p2': 'داریدمیگویید',
'p3': 'دارندمیگویند'
}
Passing strings other than space, ZWNJ (\u200c
), or empty string raise ValueError
.
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
File details
Details for the file CPVI-0.1.4b0.tar.gz
.
File metadata
- Download URL: CPVI-0.1.4b0.tar.gz
- Upload date:
- Size: 33.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7a8e6bf84c3bede2b3fb5da8748c2359090b47652dca3b56f1a5e443c7e4ba1 |
|
MD5 | 99c43328ec78b4d97ecce2d5cd42980c |
|
BLAKE2b-256 | cb118c8608537e4e7252682e3b07e30dadc8149909f19fd30177721eab3c54f9 |