Skip to main content

Hyphenator and poem analysis for Finnish

Project description

FinMeter

DOI DOI

FinMeter is a library for analyzing poetry in Finnish. It handels typical rhyming such as alliteration, assonance and consonance, Japanese meters and Kalevala meter. It can also be used to hyphenate Finnish.

pip install finmeter

If you use the methods relating to semantics, metaphors and sentiment, you will need to run:

python3 -m finmeter.download 

Sentiment analysis requires tensorflow (tested on 1.9.0 and numpy 1.16.4).

Hyphenation

Finnish words can be divided into syllables like so

import finmeter
finmeter.hyphenate("hattu")
>> hat-tu
finmeter.syllables("hattu")
>> ["hat", "tu"]
finmeter.count_sentence_syllables("kissa juoksi")
>> 4

Rhyming

FinMeter can be used to check whether two words rhyme

import finmeter
finmeter.assonance("ladata", "ravata") #True
finmeter.consonance("kettu", "katti") #True
finmeter.full_rhyme("pallolla", "kallolla") #True
finmeter.alliteration("voi", "vehnä") #True

Syllabic meters

Meters based on the number of syllables can be assessed by FinMeter

import finmeter
finmeter.list_possible_meters()
>> ['tanka', 'kalevala', 'katauta', 'sedooka', 'bussokusekika', 'haiku', 'chooka']
finmeter.assess_meter(u"kissa juoksee\nkovaa juoksee", "haiku")
>> {'verse_results': [(False, '4/5'), (False, '4/7')], 'poem_length_error': '2/3', 'poem_length_ok': False}

The result is a dictionary cointaining information about the meter for each verse in "verse results" and about the overall length in "poem_length_error". Note: For Kalevala you should use analyze_kalevala instead.

Kalevala meter

Kalevala meter functionality takes the poetic foot into account and accepts verses of upto 10 syllables providing that certain poetic rules are met. In addition, the method assess other features important in Kalevala

import finmeter
finmeter.analyze_kalevala(u"Vesi vanhin voitehista\nJänö juoksi järveen")
>> [{'base_rule': {'message': '', 'result': True}, 'verse': u'Vesi vanhin voitehista', 'normal_meter': True, 'style': {'alliteration': True, 'viskuri': True}}, {'base_rule': {'message': 'Not enough syllables', 'result': False}, 'verse': u'J\xe4n\xf6 juoksi j\xe4rveen', 'style': {'alliteration': True, 'viskuri': True}}]

The method returns a list of analysis results for each verse. If base_rule is True, it means that the verse follows the Kalevala meter, both in syllables and in foot.

Syllable length

To check if a syllable is short, use the following method

import finmeter
finmeter.is_short_syllable("tu") 
>> True

Semantics

The library has a variety of different functions realted to semantics

Concreteness

from finmeter import semantics

semantics.concreteness("kissa")
>> 4.615
semantics.is_concrete("kissa")
>> True

The former method outputs True if the concreteness of the word is equal or greater than 3. The latter method outputs a concreteness score from 1 to 5. Both of the methods will return None for out of vocabulary words.

Semantic clusters

from finmeter import semantics

semantics.semantic_clusters(["kissa", "koira", "näätä", "hauki", "vesi", "lemmikki", "puhelin", "tieto|kone", "toimisto"])
>> [['koira', 'lemmikki', 'kissa', 'näätä'], ['vesi', 'hauki'], ['toimisto', 'tieto|kone', 'puhelin']]
semantics.similarity_clusters(["koira", "kissa", "hevonen"], ["talo", "koti", "ovi"])
>> 0.18099508
semantics.cluster_centroid(["koira", "kissa", "hevonen"])
>> [-5.84886856e-02 -1.10119150e-03 -3.40119563e-03......]

The library can be used to cluster words together into semantic clusters and to assess the similarity of two word clusters.

Sentiment

The library provides a somewhat functional sentiment analysis, but I wouldn't hold my breath.

from finmeter import sentiment
sentiment.predict("Olipa kakkainen leffa")
>> -2
sentiment.predict("Kaikki on tosi kivaa")
>> 2

The possible values are -2 for strongly negative, -1 for negative, 1 for positive and 2 for strongly positive.

Metaphors

The library can give interpretations for metaphors. The lower the value, the more likely the interpretation. Example for mies on susi

from finmeter import metaphor
metaphor.interpret("mies", "susi", maximum=10)
>> {'A': [('yksinäinen', 0), ('nuori', 3)], 'Adv': [], 'V': [('raadella', 0), ('tappaa', 1), ('ampua', 2), ('liikkua', 2), ('kaataa', 4)], 'N': [('metsästäjä', 1), ('suu', 3), ('vaate', 4)], 'UNK': []}

maximum is an optional parameter to limit the number of interpretations. If you do not need POS tagging, you can pass pos_tags=False.

Cite

If you use this library, cite the following publication

Mika Hämäläinen and Khalid Alnajjar (In press). Let's FACE it. Finnish Poetry Generation with Aesthetics and Framing. In the Proceedings of The 12th International Conference on Natural Language Generation.

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

finmeter-2.0.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

finmeter-2.0.1-py2.py3-none-any.whl (1.4 MB view details)

Uploaded Python 2Python 3

File details

Details for the file finmeter-2.0.1.tar.gz.

File metadata

  • Download URL: finmeter-2.0.1.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/18.5 requests-toolbelt/0.8.0 tqdm/4.15.0 CPython/2.7.10

File hashes

Hashes for finmeter-2.0.1.tar.gz
Algorithm Hash digest
SHA256 d9e04cafa58cf53b4242f1e62725985da6a8b639fcd7181ef6fb3a207e4a50a3
MD5 3f51c56972afbb3181a225cb4c037f53
BLAKE2b-256 5851070588848fab5c39b080a186ad9d38ec814d180f059c26c07af31d15b844

See more details on using hashes here.

File details

Details for the file finmeter-2.0.1-py2.py3-none-any.whl.

File metadata

  • Download URL: finmeter-2.0.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/18.5 requests-toolbelt/0.8.0 tqdm/4.15.0 CPython/2.7.10

File hashes

Hashes for finmeter-2.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 890a704aacc63f455f36798337aa741e0300c6c90289de38dc6ce9f6f9b3a05d
MD5 b2cae955f53fc764ed58815ab7188e33
BLAKE2b-256 c131c8045c5bdcc7dad30f7cc599c23cda1b55eb45492fe44c43f6831ba01efc

See more details on using hashes here.

Supported by

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