<jupyter_start><jupyter_text>Latin<jupyter_code># Load all of Cicero's De divinatione

import os

div1_fp = os.path.expanduser('~/cltk_data/latin/text/latin_text_latin_library/cicero/divinatione1.txt')
div2_fp = os.path.expanduser('~/cltk_data/latin/text/latin_text_latin_library/cicero/divinatione2.txt')
with open(div1_fp) as fo:
    div1 = fo.read()

with open(div2_fp) as fo:
    div2 = fo.read()
div1[500:1500]
# We will calculate the Levenstein distance
# See http://docs.cltk.org/en/latest/multilingual.html#text-reuse

from cltk.text_reuse.levenshtein import Levenshtein
lev_dist = Levenshtein()
lev_dist.ratio(div1, div2)
# Find the longest common substring
# This can take some time!

from cltk.text_reuse.comparison import long_substring

# Aen 1.1-6
aen = """arma virumque cano, Troiae qui primus ab oris
Italiam, fato profugus, Laviniaque venit
litora, multum ille et terris iactatus et alto
vi superum saevae memorem Iunonis ob iram;
multa quoque et bello passus, dum conderet urbem,               5
inferretque deos Latio, genus unde Latinum,
Albanique patres, atque altae moenia Romae."""

# Servius 1.1
serv = """arma multi varie disserunt cur ab armis Vergilius coeperit, omnes tamen inania sentire manifestum est, cum eum constet aliunde sumpsisse principium, sicut in praemissa eius vita monstratum est. per 'arma' autem bellum significat, et est tropus metonymia. nam arma quibus in bello utimur pro bello posuit, sicut toga qua in pace utimur pro pace ponitur, ut Cicero “cedant arma togae” , id est bellum paci. alii ideo 'arma' hoc loco proprie dicta accipiunt, primo quod fuerint victricia, secundo quod divina, tertio quod prope semper armis virum subiungit, ut “arma virumque ferens” et “arma acri facienda viro” . arma virumque figura usitata est ut non eo ordine respondeamus quo proposuimus; nam prius de erroribus Aeneae dicit, post de bello. hac autem figura etiam in prosa utimur. sic Cicero in Verrinis “nam sine ullo sumptu nostro coriis, tunicis frumentoque suppeditato maximos exercitus nostros vestivit, aluit, armavit” . non nulli autem hyperbaton putant, ut sit sensus talis 'arma virumque cano, genus unde Latinum Albanique patres atque altae moenia Romae', mox illa revoces 'Troiae qui primus ab oris'; sic enim causa operis declaratur, cur cogentibus fatis in Latium venerit. et est poeticum principium professivum 'arma virumque cano', invocativum 'Musa mihi causas memora', narrativum 'urbs antiqua fuit'. et professivum quattuor modis sumpsit: a duce 'arma virumque cano', ab itinere 'Troiae qui primus ab oris', a bello 'multa quoque et bello passus', a generis successu 'genus unde Latinum'. virum quem non dicit, sed circumstantiis ostendit Aeneam. et bene addidit post 'arma' 'virum', quia arma possunt et aliarum artium instrumenta dici, ut “Cerealiaque arma” . cano polysemus sermo est. tria enim significat: aliquando laudo, ut “regemque canebant” ; aliquando divino, ut “ipsa canas oro” ; aliquando canto, ut in hoc loco. nam proprie canto significat, quia cantanda sunt carmina. Troiae Troia regio est Asiae, Ilium civitas Troiae; plerumque tamen usurpant poetae et pro civitate vel regionem vel provinciam ponunt, ut Iuvenalis “et flammis Asiam ferroque cadentem” . Probus ait Troiam Graios et Aiax non debere per unam i scribi. qui primus quaerunt multi, cur Aeneam primum ad Italiam venisse dixerit, cum paulo post dicat Antenorem ante adventum Aeneae fundasse civitatem. constat quidem, sed habita temporum ratione peritissime Vergilius dixit. namque illo tempore, quo Aeneas ad Italiam venit, finis erat Italiae usque ad Rubiconem fluvium: cuius rei meminit Lucanus et Gallica certus limes ab Ausoniis disterminat arva colonis. unde apparet Antenorem non ad Italiam venisse, sed ad Galliam cisalpinam, in qua Venetia est. postea vero promotis usque ad Alpes Italiae finibus, novitas creavit errorem. plerique tamen quaestionem hanc volunt ex sequentibus solvi, ut videatur ob hoc addidisse Vergilius 'ad Lavina litora', ne significaret Antenorem. melior tamen est superior expositio. primus [ergo] non ante quem nemo, sed post quem nullus, <ut> “tuque o, cui prima furentem fundit equum magno tellus percussa tridenti et hic mihi responsum primus dedit” . vel laudative 'primus', ut “primam qui legibus urbem fundabit, Curibus parvis” . ab oris speciem pro genere; nam oras terras generaliter debemus accipere. sane praepositionem mutavit, nam 'ex oris' melius potuit dicere.
"""

print(long_substring(aen, serv))
from cltk.text_reuse.comparison import minhash

print(minhash(div1,div2))
# Try with texts by different authors, adding Apuleius' Apologia

ap_fp = os.path.expanduser('~/cltk_data/latin/text/latin_text_latin_library/apuleius/apuleius.apol.txt')

with open(ap_fp) as fo:
    ap = fo.read()

print(minhash(ap, div1))<jupyter_output>0.4822404371584699<jupyter_text>Greek For Greek, we'll use the two books of Plutarch's De esu carnium.<jupyter_code>import os

carn1_fp = os.path.expanduser('~/cltk_data/greek/text/greek_text_lacus_curtius/plain/Plutarch/De_esu_carnium/1.txt')
carn2_fp = os.path.expanduser('~/cltk_data/greek/text/greek_text_lacus_curtius/plain/Plutarch/De_esu_carnium/2.txt')

with open(carn1_fp) as fo:
    carn1 = fo.read()

with open(carn2_fp) as fo:
    carn2 = fo.read()

carn1[908:2001]
from cltk.text_reuse.levenshtein import Levenshtein
lev_dist = Levenshtein()
lev_dist.ratio(carn1, carn2)
from cltk.text_reuse.comparison import minhash
print(minhash(carn1,carn2))
# Compare with Book 1 of Oppian's Cynegetica
# We're comparing prose with verse: the difference is clear

cyn_fp = os.path.expanduser('~/cltk_data/greek/text/greek_text_lacus_curtius/plain/Oppian/Cynegetica/1*.txt')
with open(cyn_fp) as fo:
    cyn = fo.read()

print(minhash(cyn, carn1))<jupyter_output>0.2874497799885211
{'fraction_non_alphanumeric': 0.07139152981849611, 'fraction_numerical': 0.014520311149524633, 'mean_word_length': 5.337349397590361, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 8, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '481902', 'license': 'MIT', 'n_tokens_mistral': 2226, 'n_tokens_neox': 2093, 'n_words': 699, 'path': '5 Text reuse.ipynb', 'repo_name': 'siddharthkv7/tutorials', 'size': '5785'}