Skip to content

Cookbook: Common Recipes

This section contains practical code snippets for common tasks with PyArud v1.0.0.

1. Analyzing a Poem File (Sadr | Ajuz)

If you have a file poems.txt where each line is formatted as Sadr | Ajuz:

from pyarud import ArudhProcessor, format_poem_report

processor = ArudhProcessor()
verses = []

with open("poems.txt", "r", encoding="utf-8") as f:
    for line in f:
        line = line.strip()
        if "|" in line:
            parts = line.split("|")
            verses.append((parts[0].strip(), parts[1].strip()))

analysis = processor.analyze_poem(verses)
print(format_poem_report(analysis))

2. Filtering Poems by Specific Meter

To filter a large collection for a specific meter (e.g. Al-Wafer):

from pyarud import ArudhProcessor

processor = ArudhProcessor()
all_verses = [
    ("سَأَتْرُكُ حُبَّكم مِنْ غَيْرِ بُغْضٍ", "وَلَكِنْ كَثْرَةُ الشُّرَكَاءِ فِيهِ"),
    ("إِذَا غَامَرْتَ فِي شَرَفٍ مَرُومِ", "فَلَا تَقْنَعْ بِمَا دُونَ النُّجُومِ"),
]

wafir_verses = []
for sadr, ajuz in all_verses:
    res = processor.analyze_verse(sadr, ajuz)
    if res.meter_key == "wafer":
        wafir_verses.append((sadr, ajuz))

print(f"Found {len(wafir_verses)} Wafir verses.")

3. Extracting Rhyme and Rawi Details

from pyarud.qafiyah import QafiyahAnalyzer

analyzer = QafiyahAnalyzer()

ajuz = "فَلَا تَقْنَعْ بِمَا دُونَ النُّجُومِ"
q = analyzer.analyze(ajuz)

print("Qafiyah Substring:", q.qafiyah_text)      # جُومِ
print("Rawi Letter:", q.rawi)                   # م
print("Rawi Movement:", q.rawi_movement)         # كسرة
print("Rhyme Form:", q.rhyme_form)               # مكسورة (مطلقة)
print("Rhyme Category:", q.rhyme_type)           # المتواتر

4. Converting Text to Arudi Phonetics & Binary Patterns

from pyarud import ArudiConverter

converter = ArudiConverter()
text = "عَلَى قَدْرِ أَهْلِ العَزْمِ تَأْتِي العَزَائِمُ"

arudi_text, pattern = converter.prepare_text(text)
print("Arudi:", arudi_text)  # عَلَا قَدْرِ أَهْلِ لْعَزْمِ تَأْتِ لْعَزَائِمُو
print("Pattern:", pattern)   # 11010110101011010110110

5. Single-Hemistich Scansion (Mashtoor / Manhook)

For poetic forms or educational exercises analyzing a single hemistich:

from pyarud import ArudhProcessor

processor = ArudhProcessor()
shatr = "يَا دَارَ مَيَّةَ بِالعَلْيَاءِ فَالسَّنَدِ"

res = processor.analyze_verse(shatr, "")
print("Meter:", res.meter_name_ar)
print("Sadr Arudi:", res.sadr.arudi_text)