Skip to main content

Rule-based morphological analysis for Udmurt

Project description

Udmurt morphological analyzer

This is a rule-based morphological analyzer for Udmurt (udm; Uralic > Permic). It is based on a formalized description of literary Udmurt morphology, which also includes a number of dialectal elements, and uses uniparser-morph for parsing. It performs full morphological analysis of Udmurt words (lemmatization, POS tagging, grammatical tagging, glossing).

How to use

Python package

The analyzer is available as a Python package. If you want to analyze Udmurt texts in Python, install the module:

pip3 install uniparser-udmurt

Import the module and create an instance of UdmurtAnalyzer class. Set mode='strict' if you are going to process text in the standard orthography (default value). Set mode='nodiacritics' if you expect some words to lack the diacritics (which often happens in social media), e.g. сыче instead of the correct сыӵе. Set mode='oldorth' if you are processing texts written in one of the older, pre-standardized orthographies (earlier than late 1930s). Right now, apostrophes in place of ъ and some features of the pre-revolution orthography are accounted for, but not all of them.

After that, you can either parse tokens or lists of tokens with analyze_words(), or parse a frequency list with analyze_wordlist(). Here is a simple example:

from uniparser_udmurt import UdmurtAnalyzer
a = UdmurtAnalyzer(mode='strict')

analyses = a.analyze_words('Морфологиез')
# The parser is initialized before first use, so expect
# some delay here (usually several seconds)

# You will get a list of Wordform objects
# The analysis attributes are stored in its properties
# as string values, e.g.:
for ana in analyses:
        print(ana.wf, ana.lemma, ana.gramm, ana.gloss)

# You can also pass lists (even nested lists) and specify
# output format ('xml' or 'json')
# If you pass a list, you will get a list of analyses
# with the same structure
analyses = a.analyze_words([['А'], ['Мон', 'тонэ', 'яратӥсько', '.']],
	                       format='xml')
analyses = a.analyze_words(['Морфологиез', [['А'], ['Мон', 'тонэ', 'яратӥсько', '.']]],
	                       format='json')

Refer to the uniparser-morph documentation for the full list of options.

Disambiguation

Apart from the analyzer, this repository contains a set of Constraint Grammar rules that can be used for partial disambiguation of analyzed Udmurt texts. They reduce the average number of different analyses per analyzed token from about 1.6 to about 1.3. If you want to use them, set disambiguation=True when calling analyze_words:

analyses = a.analyze_words(['Мон', 'тонэ', 'яратӥсько'], disambiguate=True)

In order for this to work, you have to install the cg3 executable separately. On Ubuntu/Debian, you can use apt-get:

sudo apt-get install cg3

On Windows, download the binary and add the path to the PATH environment variable. See the documentation for other options.

Note that each time you call analyze_words() with disambiguate=True, the CG grammar is loaded and compiled from scratch, which makes the analysis even slower. If you are analyzing a large text, it would make sense to pass the entire text contents in a single function call rather than do it sentence-by-sentence, for optimal performance.

Word lists

Alternatively, you can use a preprocessed word list. The wordlists directory contains a list of words from a 10-million-word Udmurt corpus (wordlist.csv), list of analyzed tokens (wordlist_analyzed.txt; each line contains all possible analyses for one word in an XML format), and list of tokens the parser could not analyze (wordlist_unanalyzed.txt). The recall of the analyzer on the corpus texts is about 96% and the corpus is sufficiently large, so if you just use the analyzed word list, the recall on your texts will almost definitely exceed 90%.

Description format

The description is carried out in the uniparser-morph format and involves a description of the inflection (paradigms.txt), a grammatical dictionary (udm_lexemes_XXX.txt files), a list of rules that annotate combinations of lexemes and grammatical values with additional Russian translations (lex_rules.txt), and a short list of analyses that should be avoided (bad_analyses.txt). The dictionary contains descriptions of individual lexemes, each of which is accompanied by information about its stem, its part-of-speech tag and some other grammatical/borrowing information, its inflectional type (paradigm), and Russian translation. See more about the format in the uniparser-morph documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uniparser_udmurt-2.2.3.tar.gz (3.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uniparser_udmurt-2.2.3-py3-none-any.whl (3.4 MB view details)

Uploaded Python 3

File details

Details for the file uniparser_udmurt-2.2.3.tar.gz.

File metadata

  • Download URL: uniparser_udmurt-2.2.3.tar.gz
  • Upload date:
  • Size: 3.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for uniparser_udmurt-2.2.3.tar.gz
Algorithm Hash digest
SHA256 f39e9c0b96ef4cc0d5ab8cedd70d86e817ff0b5b0aea396e63d03c9a1d1ac5a8
MD5 57529df3b234ff5bd4849967056356be
BLAKE2b-256 d1eaf59cd364c7d9f71d2cc262a2c29b4137c55126f7a4688228248c8c4d3c57

See more details on using hashes here.

File details

Details for the file uniparser_udmurt-2.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for uniparser_udmurt-2.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 756c85350b808acbb8c0ff271e4ffdf72c5d546a29c78b925d73b13b64d4c240
MD5 87e8b18b2f9f1900ec075247a8756d9b
BLAKE2b-256 cb23840f9636971fa4371ff1c4b3a992f435b45f6eab3f08eda667b9478fad51

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page