{"id":37084832,"url":"https://github.com/bab2min/lamonpy","last_synced_at":"2026-01-14T10:24:49.231Z","repository":{"id":62575075,"uuid":"297863126","full_name":"bab2min/lamonpy","owner":"bab2min","description":"Latin POS Tagger \u0026 Lemmatizer for Python","archived":false,"fork":false,"pushed_at":"2021-04-18T12:27:53.000Z","size":88150,"stargazers_count":17,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-21T21:40:33.123Z","etag":null,"topics":["latin-language","lemmatizer","postagging","python-library"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bab2min.png","metadata":{"files":{"readme":"README.rst","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":"2020-09-23T05:32:07.000Z","updated_at":"2025-04-11T01:23:45.000Z","dependencies_parsed_at":"2022-11-03T17:46:53.016Z","dependency_job_id":null,"html_url":"https://github.com/bab2min/lamonpy","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bab2min/lamonpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bab2min%2Flamonpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bab2min%2Flamonpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bab2min%2Flamonpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bab2min%2Flamonpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bab2min","download_url":"https://codeload.github.com/bab2min/lamonpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bab2min%2Flamonpy/sbom","scorecard":{"id":222270,"data":{"date":"2025-08-11","repo":{"name":"github.com/bab2min/lamonpy","commit":"7a610a620cb1a1d14c51de12fa31bf1a6f70bfac"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/18 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/deploy.yml:1","Warn: no topLevel permission defined: .github/workflows/deploy_test.yml:1","Warn: no topLevel permission defined: .github/workflows/generate_documentation.yml:1","Warn: no topLevel permission defined: .github/workflows/pull_request_test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:87: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_test.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_test.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_test.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_test.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_test.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/deploy_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/generate_documentation.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/generate_documentation.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/generate_documentation.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/generate_documentation.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull_request_test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/pull_request_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull_request_test.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/pull_request_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull_request_test.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/pull_request_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull_request_test.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/pull_request_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pull_request_test.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/bab2min/lamonpy/pull_request_test.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:60","Warn: pipCommand not pinned by hash: .github/workflows/deploy.yml:71","Warn: pipCommand not pinned by hash: .github/workflows/deploy_test.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/deploy_test.yml:59","Warn: pipCommand not pinned by hash: .github/workflows/deploy_test.yml:70","Warn: pipCommand not pinned by hash: .github/workflows/generate_documentation.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/generate_documentation.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/pull_request_test.yml:56","Warn: pipCommand not pinned by hash: .github/workflows/pull_request_test.yml:62","Warn: pipCommand not pinned by hash: .github/workflows/pull_request_test.yml:66","Info:   0 out of  17 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T02:51:58.280Z","repository_id":62575075,"created_at":"2025-08-17T02:51:58.280Z","updated_at":"2025-08-17T02:51:58.280Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:18:03.274Z","status":"ssl_error","status_checked_at":"2026-01-14T10:16:11.865Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["latin-language","lemmatizer","postagging","python-library"],"created_at":"2026-01-14T10:24:48.558Z","updated_at":"2026-01-14T10:24:49.223Z","avatar_url":"https://github.com/bab2min.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Lamon, The Latin POS Tagger \u0026 Lemmatizer\n========================================\n\n.. image:: https://badge.fury.io/py/lamonpy.svg\n    :target: https://pypi.python.org/pypi/lamonpy\n.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.4091536.svg\n   :target: https://doi.org/10.5281/zenodo.4091536\n\n`Lamon` (LAtin MOrphological tools, pronounced /leɪmən/) is a simple POS tagger \u0026 lemmatizer for Latin written in C++ \nand `Lamonpy` is a Python package of Lamon. You can easily obtain lemma and tag of each word in given text using Lamonpy.\n\n\nGetting Started\n---------------\nYou can install Lamonpy easily using pip. (https://pypi.org/project/lamonpy/)\n::\n\n    $ pip install --upgrade pip\n    $ pip install lamonpy\n\nThe supported OS and Python versions are:\n\n* Linux (x86-64) with Python \u003e= 3.5 \n* macOS \u003e= 10.13 with Python \u003e= 3.5\n* Windows 7 or later (x86, x86-64) with Python \u003e= 3.5\n* Other OS with Python \u003e= 3.5: Compilation from source code required (with c++11 compatible compiler)\n\nHere is a simple example using Lamonpy to analyze Latin texts.\n::\n\n    from lamonpy import Lamon\n    lamon = Lamon()\n    score, tagged = lamon.tag('In principio creavit Deus caelum et terram.')[0]\n    print(tagged)\n    # `tagged` is a list of tuples `(start_pos, end_pos, lemma, tag)`\n    # [(0, 2, 'in', 'r--------'), \n    #  (3, 12, 'principium', 'n-s---nb-'), \n    #  (13, 20, 'creo', 'v3sria---'), \n    #  (21, 25, 'deus', 'n-s---mn-'), \n    #  (26, 32, 'caelus', 'n-s---ma-'), \n    #  (33, 35, 'et', 'c--------'), \n    #  (36, 42, 'terra', 'n-s---fa-'), \n    #  (42, 43, '.', '---------')]\n\nTagging Model and Its Accuracy\n------------------------------\nLamon's tagging model is based on BiLSTM network trained with \n`Perseus Latin Dependency Treebanks \u003chttps://perseusdl.github.io/treebank_data/\u003e`_ (4,000 sentences)\nand self-trained with raw Latin corpora (440,000 sentences) collected by `Latina Vivense \u003chttps://latina.bab2min.pe.kr/xe/text\u003e`_.\n\nSince there is no available standard for evaluating Latin taggers, we built own test set named `vivens` of 900 sentences. The result of evaluation is shown below:\n\n+-------------------+---------------------+---------------------+\n|                   |  vivens (900 sents) | Perseus (4000 sents)|\n+                   +-------+------+------+-------+------+------+\n|                   | lemma |  tag | both | lemma |  tag | both |\n+===================+=======+======+======+=======+======+======+\n|**Lamon**          |  94.6 | 83.0 | 81.1 |  89.4 | 80.2 | 76.6 |\n+-------------------+-------+------+------+-------+------+------+\n|**Lamon (large)**  |  94.2 | 83.3 | 81.3 |  89.7 | 81.9 | 78.3 |\n+-------------------+-------+------+------+-------+------+------+\n|**Lamon (uv.)**    |  94.4 | 82.6 | 80.7 |  87.7 | 77.9 | 73.8 |\n+-------------------+-------+------+------+-------+------+------+\n|Backoff            |  88.1 |      |      |  92.4 |      |      |\n+-------------------+-------+------+------+-------+------+------+\n|123 POS            |       | 58.1 | 54.8 |       | 83.8 | 79.6 |\n+-------------------+-------+------+------+-------+------+------+\n|CRF POS            |       | 69.1 | 63.4 |       | 77.3 | 72.9 |\n+-------------------+-------+------+------+-------+------+------+\n\n* Lamon : base size (embedding_size:80, hidden_size:160)\n* Lamon (large) : large size (embedding_size:160, hidden_size:320)\n* Lamon (uv.) : large size without Perseus' dataset\n* Backoff : `cltk.lemmatize.latin.backoff.BackoffLatinLemmatizer \u003chttps://docs.cltk.org/en/latest/latin.html#lemmatization-backoff-method\u003e`_\n* 123 POS : `cltk.tag.pos.POSTag.tag_ngram_123_backoff \u003chttps://docs.cltk.org/en/latest/latin.html#gram-backoff-tagger\u003e`_\n* CRF POS : `cltk.tag.pos.POSTag.tag_crf \u003chttps://docs.cltk.org/en/latest/latin.html#crf-tagger\u003e`_\n* For calculating `both` score of `123 POS` and `CRF POS`, `Backoff`'s results are used.\n\nSince Lamon and all cltk's tagger are trained with Perseus' dataset, the scores for Perseus are not significant for confirming the actual accuracy of each model.\nRather, it shows that `123 POS` and `CRF POS` are overfitting to Perseus's dataset.\n\nBecause the size of the vivens dataset is small, the results of this evaluation can be inaccurate.\nWe plan to acquire larger dataset for evaluation and publish the dataset to make more accurate evaluation.\n\nTagset\n------\nLamon supports three types of tagset.\n\n1. perseus\n::\n\n    1:\tpart of speech\n\n    n\tnoun\n    v\tverb\n    a\tadjective\n    d\tadverb\n    c\tconjunction\n    r\tadposition\n    p\tpronoun\n    m\tnumeral\n    i\tinterjection\n    e\texclamation\n    u\tpunctuation\n\n    2:\tperson\n\n    1\tfirst person\n    2\tsecond person\n    3\tthird person\n\n    3:\tnumber\n\n    s\tsingular\n    p\tplural\n\n    4:\ttense\n\n    p\tpresent\n    i\timperfect\n    r\tperfect\n    l\tpluperfect\n    t\tfuture perfect\n    f\tfuture\n\n    5:\tmood\n\n    i\tindicative\n    s\tsubjunctive\n    n\tinfinitive\n    m\timperative\n    p\tparticiple\n    d\tgerund\n    g\tgerundive\n\n    6:\tvoice\n\n    a\tactive\n    p\tpassive\n    d\tdeponent\n\n    7:\tgender\n                \n    m\tmasculine\n    f\tfeminine\n    n\tneuter\n\n    8:\tcase\n\n    n\tnominative\n    g\tgenitive\n    d\tdative\n    a\taccusative\n    v\tvocative\n    b\tablative\n    l\tlocative\n\n    9:\tdegree\n\n    p\tpositive\n    c\tcomparative\n    s\tsuperlative\n\n\n2. vivens\n::\n\n    # Moods\n    D: indicative\n    S: subjunctive\n    I: imperative\n    T: infinitive\n    L: participle\n\n    # Tenses\n    0M: present\n    0E: perfect\n    RM: imperfect\n    RE: pluperfect\n    FM: future\n    FE: future perfect\n\n    # Voices \n    A: active\n    P: passive\n\n    # Participle (combination of mood, tense \u0026 voice)\n    L0A: present participle\n    LRP: past participle\n    LFA: future active participle\n    LFP: gerundive\n\n    # Persons\n    1: first\n    2: second\n    3: third\n\n    # Genders\n    m: masculine\n    f: feminine\n    n: neuter\n\n    # Numbers\n    s: singular\n    p: plural\n\n    # Cases\n    o: nominative\n    g: genitive\n    d: dative\n    a: accusative\n    b: ablative\n    v: vocative\n    x: adverbial\n\n    # Degrees\n    (positive isn't marked explicitly.)\n    c: comparative\n    u: superlative\n\n    # etc\n    r: preposition\n    j: conjunction\n\n3. raw\n::\n\n    ...\n\nDemo\n----\nhttps://latina.bab2min.pe.kr/xe/lTagger (Korean)\n\nLarger Models\n-------------\nDue to the package size limit of pypi, the distributed wheel package contains `base model` only. We provide larger models by Google-drive links.\n\n* Large model : https://drive.google.com/file/d/1u8LdvD-zKtrj7kDRs6CjQw74ZG6aT8jS/view?usp=sharing\n* Large model (unsupervised) : https://drive.google.com/file/d/1nw8LO_1o0O894gXzgQ7Hx5Fyikvy1w2u/view?usp=sharing\n\nYou can use these models by passing the model path to `Lamon.__init__` as arguments.\n::\n\n    from lamonpy import Lamon\n    lamon = Lamon(dict_path='dict.large.bin', tagger_path='tagger.large.bin')\n\nLicense\n-------\n`Lamonpy` is licensed under the terms of MIT License, meaning you can use it for any reasonable purpose and remain in complete ownership of all the documentation you produce.\n\nHistory\n-------\n* 0.2.0 (2020-10-16)\n    * `[NUM]` token for Roman numeral was added.\n    * The accuracy was slightly increased by introducing joint lemma-tag layer.\n* 0.1.0 (2020-09-26)\n    * the first version of `lamonpy`\n\nCitation\n--------\n::\n\n    @software{bab2min_2020_4091536,\n      author       = {bab2min},\n      title        = {bab2min/lamonpy: 0.2.0},\n      month        = oct,\n      year         = 2020,\n      publisher    = {Zenodo},\n      version      = {v0.2.0},\n      doi          = {10.5281/zenodo.4091536},\n      url          = {https://doi.org/10.5281/zenodo.4091536}\n    }\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbab2min%2Flamonpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbab2min%2Flamonpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbab2min%2Flamonpy/lists"}