<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged open-source-tools</title>
<link>https://coderlegion.com/tag/open-source-tools</link>
<description>Powered by Question2Answer</description>
<item>
<title>Open-Source Python Tools for Russian Text Processing in Digital Humanities</title>
<link>https://coderlegion.com/25025/open-source-python-tools-for-russian-text-processing-in-digital-humanities</link>
<description>&lt;p&gt;&lt;em&gt;Practical tools for OCR, accentuation, and text analysis that every developer should know about&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem&quot;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;If you're working with Russian texts in the humanities, you've probably faced this situation: you need to process a pre-1917 text, but every NLP tool is trained on modern Russian. Or you want to analyze verse, but stress marks are missing. Or you have a TEI XML document that needs conversion, but existing tools are either proprietary or dead.&lt;/p&gt;
&lt;p&gt;While large language models are everywhere, they're surprisingly bad at these specific tasks. As Orekhov (2025) points out in his review, &quot;modern versions of artificial intelligence cannot handle subtle nuances tied to specific subject domains.&quot;&lt;/p&gt;
&lt;p&gt;Worse, even when good solutions exist, nobody knows about them. Orekhov mentions at least two separate attempts to rebuild functionality that was already available in open-source Python packages — a clear sign that the real problem isn't technical, but informational.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-s-actually-available&quot;&gt;What's Actually Available&lt;/h3&gt;
&lt;p&gt;Here are the tools Orekhov covers. All are open-source, Python-based, and created by researchers at HSE University's School of Linguistics.&lt;/p&gt;
&lt;h4 id=&quot;1-pre-1917-russian-orthography-support&quot;&gt;1. Pre-1917 Russian Orthography Support&lt;/h4&gt;
&lt;h5 id=&quot;ocr-model-for-old-orthography&quot;&gt;OCR Model for Old Orthography&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://huggingface.co/Serovvans/trocr-preferform-orthography&quot;&gt;Serovvans/trocr-preferform-orthography&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The model uses Tesseract-OCR infrastructure and handles the pre-reform Russian alphabet (including Ѣ, Ѳ, Ѵ, and the final Ъ). It's actually trained on modern Russian text in old orthography (not Old Church Slavonic — the model's description incorrectly labels it as &quot;Old Russian&quot;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality metrics&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CER (Character Error Rate): 0.095&lt;/li&gt;
&lt;li&gt;WER (Word Error Rate): 0.298&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means only about 70% of words are correctly recognized. Not great, but it's free and works well enough when combined with GPT-4 for correction, as Orekhov demonstrates with an example where GPT-4o successfully cleans up OCR errors while preserving the old orthography.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example usage&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from recognize_page import recognize_page

page_path = &quot;page.png&quot;
text = recognize_page(page_path, text_output_path=&quot;output/file.txt&quot;)
print(f&quot;Text from page:\n{text}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;: tesseract-ocr, poppler, pytesseract, Pillow, transformers, torch, numpy, tqdm, pdf2image&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note&lt;/strong&gt;: For 18th-century texts with that weird 'm'-shaped 'т', this model doesn't work well. You'll need proprietary Transkribus models (which Orekhov warns against due to their dependence on a private company with an uncertain future).&lt;/p&gt;
&lt;h5 id=&quot;old-to-new-orthography-converter&quot;&gt;Old to New Orthography Converter&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/preferom2modern/&quot;&gt;preferom2modern on PyPI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simple, dependency-free string conversion. Can output plain text or TEI XML with &lt;code&gt;&amp;lt;choice&amp;gt;&lt;/code&gt; tags preserving both versions:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;choice&amp;gt;
  &amp;lt;reg&amp;gt;пример&amp;lt;/reg&amp;gt;
  &amp;lt;orig&amp;gt;примѣръ&amp;lt;/orig&amp;gt;
&amp;lt;/choice&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Works from both command line and Python. Orekhov notes it's been unmaintained for years, but that's actually fine — it worked correctly from day one.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-literary-and-poetic-text-analysis&quot;&gt;2. Literary and Poetic Text Analysis&lt;/h4&gt;
&lt;h5 id=&quot;accentuation-module-for-russian-verse&quot;&gt;Accentuation Module for Russian Verse&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/ru-accent-poet/&quot;&gt;ru-accent-poet on PyPI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a hybrid approach: dictionary-based + recurrent neural network. It's designed specifically for poetic texts where stress placement is crucial for meter analysis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;: The main downside is speed. A pre-annotated dataset of classical Russian prose was published in 2024 to let researchers skip the processing step.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Citation&lt;/strong&gt;: Короткова Ю. О. (2022). Комбинированный словарно-нейросетевой акцентуатор для разметки русского поэтического текста. &lt;em&gt;Труды Института русского языка им. В. В. Виноградова&lt;/em&gt;, 3(33), 181–190.&lt;/p&gt;
&lt;h5 id=&quot;direct-speech-detector&quot;&gt;Direct Speech Detector&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/neiriz/direct-speech-detector&quot;&gt;neiriz/direct-speech-detector&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This isn't just a rule-based approach — it's a full pipeline combining regex (for direct speech marks) with morphological parsing, parsing, and text segmentation. It handles cases where direct speech and authorial narration are mixed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use cases&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comparing dialogue density across novels (there's previous work by Sobchuk, 2016)&lt;/li&gt;
&lt;li&gt;Analyzing character speech patterns&lt;/li&gt;
&lt;li&gt;Extracting dialogue for stylistic analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;formulaicity-assessment-module&quot;&gt;Formulaicity Assessment Module&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/evgenilatyshev/formulaicity&quot;&gt;evgenilatyshev/formulaicity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is for folklore studies. It detects formulaic expressions — repeated phrases characteristic of oral traditions. The algorithm combines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vocabulary variability coefficient (VocD)&lt;/li&gt;
&lt;li&gt;N-gram coefficients&lt;/li&gt;
&lt;li&gt;Binomial expressions&lt;/li&gt;
&lt;li&gt;Fixed phrases&lt;/li&gt;
&lt;li&gt;Interjections&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example output&lt;/strong&gt; (from a folk song analyzed by the module's author, V. Sidnenko):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Found n-grams: 
- черный ворон

Formulaicity coefficient: 1.207
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;: spacy, pymorphy2, numpy, sklearn&lt;/p&gt;
&lt;h5 id=&quot;tei-xml-converter&quot;&gt;TEI XML Converter&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/TEItransformer/&quot;&gt;TEItransformer on PyPI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TEI is the standard XML format for digital humanities. This module, developed by Kostyanitsyna and Skorinkin (2024), converts TEI XML to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DOCX&lt;/strong&gt; (editable format)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt; (with search functionality)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt; (for data analysis)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hood, it's actually an XSLT wrapper — which Orekhov candidly calls an &quot;outdated and unreliable technology&quot; for XML processing, but acknowledges that building a pure Python alternative proved too complex.&lt;/p&gt;
&lt;p&gt;The generated HTML includes a search interface that lets you query by character, speaker, or any TEI-annotated field.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-journal-publication-preprocessing&quot;&gt;3. Journal Publication Preprocessing&lt;/h4&gt;
&lt;h5 id=&quot;cgi-processor&quot;&gt;cgi-processor&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nevmenandr/cgi_processor&quot;&gt;nevmenandr/cgi_processor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a niche tool for the journal &quot;Цифровые гуманитарные исследования&quot; (Digital Humanities Research). It handles LaTeX preprocessing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Non-breaking spaces between initials and surnames&lt;/li&gt;
&lt;li&gt;Em-dashes in number ranges&lt;/li&gt;
&lt;li&gt;Other typographic rules specific to Russian academic publishing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The journal uses LaTeX for production, and manual typographic cleanup is error-prone. This automates it, saving editors from the tedious process of manually inserting special characters.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;Here's the thing: these tools solve real problems that LLMs can't handle well. They're infrastructure. They're the kind of boring, practical code that enables interesting research.&lt;/p&gt;
&lt;p&gt;The bigger issue, as Orekhov emphasizes, is visibility. Researchers often don't even check if their problem has already been solved. There's a mental block: &quot;my problem is so specific, surely nobody else has built this.&quot;&lt;/p&gt;
&lt;p&gt;But they have. And it's open source.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;reference&quot;&gt;Reference&lt;/h3&gt;
&lt;p&gt;Orekhov, B. V. (2025). Otkrytye komp'yuternye instrumenty dlya resheniya zadach otsifrovki i analiza russkoyazychnogo teksta v oblasti Digital Humanities [Open computer tools for digitization and analysis of Russian-language text in Digital Humanities]. &lt;em&gt;Tsifrovye gumanitarnye issledovaniya&lt;/em&gt;, (2), 71–83. DOI: &lt;a rel=&quot;nofollow&quot; href=&quot;https://doi.org/10.31860/cgi-2025-2-71-83&quot;&gt;10.31860/cgi-2025-2-71-83&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Available (in Russian) at: &lt;a rel=&quot;nofollow&quot; href=&quot;https://nevmenandr.github.io/portfolio/assets/pdf/cgi2025-2-tools.pdf&quot;&gt;https://nevmenandr.github.io/portfolio/assets/pdf/cgi2025-2-tools.pdf&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25025/open-source-python-tools-for-russian-text-processing-in-digital-humanities</guid>
<pubDate>Tue, 15 Sep 2026 08:52:00 +0000</pubDate>
</item>
<item>
<title>Oviora Builder: A Lightweight Android Studio Alternative for Low-Spec Windows PCs</title>
<link>https://coderlegion.com/24972/oviora-builder-a-lightweight-android-studio-alternative-for-low-spec-windows-pcs</link>
<description>&lt;p&gt; &lt;strong&gt;The Problem I Kept Running Into&lt;/strong&gt;&lt;br&gt;
Android development is powerful — but the &lt;em&gt;first step&lt;/em&gt; is brutal if your machine isn't strong.&lt;/p&gt;
&lt;p&gt;Ask any beginner who's tried to start Android development on a low-spec Windows laptop and you'll hear the same story:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android Studio takes forever to install and even longer to index a project&lt;/li&gt;
&lt;li&gt;SDK setup is confusing — which components, which paths, which versions?&lt;/li&gt;
&lt;li&gt;JDK version conflicts break builds before you've written a single line&lt;/li&gt;
&lt;li&gt;Gradle errors read like a foreign language&lt;/li&gt;
&lt;li&gt;ADB device setup silently fails with no clear reason why&lt;/li&gt;
&lt;li&gt;By the time all of this is sorted, many beginners have already given up — before their first APK even runs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This isn't a hypothetical. It's a real barrier for students, self-taught developers, coding bootcamp learners, and anyone working on a 4GB RAM / 2-core / HDD machine — which describes a huge number of learners outside well-resourced tech hubs.&lt;/p&gt;
&lt;p&gt;I kept hitting this wall myself, and eventually built a tool to get past it.&lt;/p&gt;
&lt;h3 id=&quot;what-oviora-builder-actually-does&quot;&gt;What Oviora Builder Actually Does&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Oviora Builder&lt;/strong&gt; is a lightweight, CLI-based tool that lets you create a real &lt;strong&gt;native Android Java/XML project&lt;/strong&gt;, build a debug APK with Gradle, install it on a connected phone via ADB, and launch it — all from a few terminal commands, without ever opening Android Studio.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;oviora create MyApp
cd MyApp
oviora br
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That last command — &lt;code&gt;br&lt;/code&gt;, short for &lt;strong&gt;Build + Run&lt;/strong&gt; — does the entire pipeline in one shot: validates the project, backs up existing output, syncs your workspace into the actual Android project structure, builds the APK with Gradle, installs it with ADB, and launches it on your phone.&lt;/p&gt;
&lt;p&gt;On a local low-spec test (2GB RAM Windows PC), that entire flow — create, build, install, launch — finished in under 6 minutes.&lt;/p&gt;
&lt;h3 id=&quot;two-ways-to-get-started&quot;&gt;Two Ways to Get Started&lt;/h3&gt;
&lt;p&gt;Oviora Builder ships in two forms, depending on what's already on your machine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NPM CLI&lt;/strong&gt; (&lt;code&gt;npm install -g oviora-builder&lt;/code&gt;) — for developers who already have Node.js, JDK, Android SDK, and Gradle installed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Installer (.exe)&lt;/strong&gt; — for complete beginners on a fresh Windows PC. It bundles a portable Node.js, JDK, Android SDK, ADB, and Gradle setup, so there's nothing to configure manually — you install it, open PowerShell, and start building.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The installer path is really the point of the project: it removes the setup barrier entirely for someone who has never configured an Android dev environment before.&lt;/p&gt;
&lt;h3 id=&quot;where-it-came-from&quot;&gt;Where It Came From&lt;/h3&gt;
&lt;p&gt;The idea started from a simple, recurring observation: most Android tooling assumes you already have a fast machine and a fully configured environment. Flutter, React Native, and even Android Studio itself are all excellent — but they're heavy by design, and that weight falls hardest on exactly the people who can least afford it: students and beginners on modest hardware.&lt;/p&gt;
&lt;p&gt;Oviora Builder isn't trying to compete with those tools on features. It has one narrow, deliberate goal:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Make native Android app development possible to &lt;em&gt;start&lt;/em&gt; on a low-spec Windows PC, without a heavy IDE getting in the way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;who-it-s-actually-for&quot;&gt;Who It's Actually For&lt;/h3&gt;
&lt;p&gt;Oviora Builder is built for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Students and self-taught beginners&lt;/li&gt;
&lt;li&gt;Learners on low-spec laptops or older hardware&lt;/li&gt;
&lt;li&gt;Coding bootcamps and college labs with shared, modest machines&lt;/li&gt;
&lt;li&gt;Developers who just want a fast, no-GUI way to spin up a native Android project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is &lt;strong&gt;not&lt;/strong&gt; aimed at senior Android engineers, large production teams, or anyone needing Jetpack Compose, a full debugger/profiler, or a signing/release pipeline — Android Studio remains the right tool for that. Oviora Builder solves a different, narrower problem: getting someone from zero to a working native APK on their own phone, as fast and painlessly as possible.&lt;/p&gt;
&lt;h3 id=&quot;what-makes-it-different&quot;&gt;What Makes It Different&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Oviora Builder &lt;/th&gt;&lt;th&gt;Android Studio &lt;/th&gt;&lt;th&gt;Flutter / React Native&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Setup for beginners &lt;/td&gt;&lt;td&gt;One installer, done &lt;/td&gt;&lt;td&gt;Complex, multi-step &lt;/td&gt;&lt;td&gt;Complex, multi-step&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Low-spec PC friendly &lt;/td&gt;&lt;td&gt;Core design goal &lt;/td&gt;&lt;td&gt;Heavy &lt;/td&gt;&lt;td&gt;Heavy/medium&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Output &lt;/td&gt;&lt;td&gt;Native Java/XML &lt;/td&gt;&lt;td&gt;Native &lt;/td&gt;&lt;td&gt;Cross-platform abstraction&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GUI/IDE required &lt;/td&gt;&lt;td&gt;No &lt;/td&gt;&lt;td&gt;Yes &lt;/td&gt;&lt;td&gt;Often, for setup/debug&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A few things it does under the hood that beginners specifically benefit from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Built-in static lint&lt;/strong&gt; (&lt;code&gt;oviora lint&lt;/code&gt;) catches broken &lt;code&gt;@drawable/&lt;/code&gt;, &lt;code&gt;@color/&lt;/code&gt;, &lt;code&gt;@layout/&lt;/code&gt;, and &lt;code&gt;@id/&lt;/code&gt; references &lt;em&gt;before&lt;/em&gt; Gradle runs — instead of a slow build failing with a cryptic &quot;cannot find symbol&quot; error at the very end.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale APK detection&lt;/strong&gt; — if you've edited your project since the last build, &lt;code&gt;oviora run&lt;/code&gt; rebuilds automatically so you never accidentally test an old APK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plain-language error explanations&lt;/strong&gt; — common failures (missing SDK path, no device connected, manifest merger conflicts, AndroidX mismatches) are recognized and explained in plain English instead of dumping a raw Gradle stack trace on a beginner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe-by-default file handling&lt;/strong&gt; — nothing is auto-restored or auto-renamed silently. If a workspace file goes missing or a support-library import needs updating, Oviora tells you and lets you decide, rather than guessing and possibly overwriting real project files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;try-it&quot;&gt;Try It&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;npm install -g oviora-builder
oviora doctor
oviora create MyApp --package com.example.myapp
cd MyApp
oviora br
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nagodip7-sys/oviora-builder&quot;&gt;https://github.com/nagodip7-sys/oviora-builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NPM: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/oviora-builder&quot;&gt;https://www.npmjs.com/package/oviora-builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows Installer: available on the GitHub releases page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oviora Builder isn't trying to be the biggest Android tool out there. It's trying to be one of the fastest, least painful ways for a beginner on a weak Windows PC to go from nothing to a real, working native Android app on their own phone.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24972/oviora-builder-a-lightweight-android-studio-alternative-for-low-spec-windows-pcs</guid>
<pubDate>Thu, 20 Aug 2026 08:34:19 +0000</pubDate>
</item>
</channel>
</rss>