{"id":32160210,"url":"https://github.com/vjeranc/moan","last_synced_at":"2026-07-13T19:32:43.935Z","repository":{"id":24738248,"uuid":"28150643","full_name":"vjeranc/moan","owner":"vjeranc","description":"Language-agnostic analyzer for positional morphosyntactic descriptors","archived":false,"fork":false,"pushed_at":"2015-04-06T17:09:13.000Z","size":173,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-08T07:52:53.791Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vjeranc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-12-17T18:52:49.000Z","updated_at":"2023-12-04T08:46:40.000Z","dependencies_parsed_at":"2022-08-17T17:25:12.050Z","dependency_job_id":null,"html_url":"https://github.com/vjeranc/moan","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vjeranc/moan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeranc%2Fmoan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeranc%2Fmoan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeranc%2Fmoan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeranc%2Fmoan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vjeranc","download_url":"https://codeload.github.com/vjeranc/moan/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeranc%2Fmoan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35434586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-21T13:37:15.495Z","updated_at":"2026-07-13T19:32:43.928Z","avatar_url":"https://github.com/vjeranc.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"moan\n===================\n[![Build Status](https://travis-ci.org/vjeranc/moan.svg?branch=master)](https://travis-ci.org/vjeranc/moan)\n\nThis package provides a morphosyntactic analyzer that is language-agnostic in a sense that if language uses positional tags (ex. [Multext East][MultextEast], [Polish tagset][nkjp-tagset] etc.) this analyzer can be used. It is also possible to use it for part-of-speech tags only.\n\nIt solves a problem of providing a set of possible tags for a given word. Instead of just matching on the word-set pair, one can assume that suffixes of an unknown word also hold some information about the set.\n\nFor documentation check out the package on [Hackage](http://hackage.haskell.org/package/moan). For detailed documentation about the internals check the code in this repository.\n\nUsage\n===================\n\nOne example of where this might be useful is [concraft] tagging library. The analyzer is used in the [concraft-hr] MSD-tagger. Before the POS-tagging one needs to have a set of possible tags for a word from which the correct one is disambiguated. It is assumed that the sentences are separated and tokenized.\n\nFor a sufficiently large construction corpus this analyzer might only benefit from additional regular expressions for easily matched tokens or matchers for punctuation and numbers. There is a possibility of returning a set of possible tags that isn't complete - the set doesn't contain a correct tag. If construction corpus isn't sufficiently large, there might be a fair amount of incomplete sets on unseen named entities (person names, corporation names etc.).\n\nIf one needs the analyzer to be less aggressive, it is recommended to extend the functionality and remove the sets of possible tags from words that might be named (ex. capitalized words in the middle of a sentence - this can be added in form of auxiliary functions in the future). This \"disadvantage\" is mostly present in use cases where part-of-speech tags of a language contain information whether a word represents a named entity or not, so if this is not a case, there will be no need to extend the current functionality.\n\nA simple example of using `GHCi` for construction:\n\n```Haskell\n:set -XOverloadedStrings\nimport NLP.Morphosyntax.Analyzer\nimport qualified Data.Text.IO as T\nimport qualified Data.Tagset.Positional as P\nf \u003c- readFile \"tagset.cfg\"\nlet tset = P.parseTagset \"tagset-name\" f\nf \u003c- T.readFile \"construction-corpus.txt\"\nlet train = map (\\(word:tags) -\u003e (word, map (P.parseTag tset) tags)) . map T.words . filter (not . T.null) . T.lines $ f\nlet conf = AConf 3 [(Punct, S.fromList [P.parseTag tset \"Z\"])] M.empty\n--   ^^ \"Z\" is a Croatian tag for punctuation\nlet an = create tset conf train\nsave \"analyzer.gz\" an\n```\nIt is assumed that tag attributes are separated with `:` for `P.parseTag`. One could write a different parsing function since `P.Tag` is just a `Data.Map`.\n\n[concraft]: https://github.com/kawu/concraft\n[concraft-hr]: https://github.com/vjeranc/concraft-hr\n[nkjp-tagset]: http://nkjp.pl/poliqarp/help/ense2.html\n[ru-tagset]: http://ufal.mff.cuni.cz/~hana/morph/rutags.html\n[MultextEast]: http://nl.ijs.si/ME/ \"Multext East\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjeranc%2Fmoan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvjeranc%2Fmoan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjeranc%2Fmoan/lists"}