diff --git a/Progetto_Lett.ipynb b/Progetto_Lett.ipynb index f0c98df..9e75621 100644 --- a/Progetto_Lett.ipynb +++ b/Progetto_Lett.ipynb @@ -122,35 +122,42 @@ " nostra\n", " vita\n", " \n", + " ...\n", + " ...\n", " \n", - " mi\n", - " ritrovai\n", - " per\n", - " una\n", - " selva\n", - " oscura\n", + " che\n", + " \n", + " \t nel \n", + " \t nel\n", + " \n", + " pensier\n", + " rinova\n", + " la\n", + " paura!\n", " \n", " \n", " ...\n", "~~~~\n", "\n", " \n", - "Il tag \\ individua la porzione di file di un *Canto*, il tag \\ individua un verso, il tag \\ individua un termine/parola/lemma(?) ciascuno dei quali ha 1 o 2 attributi.\n", + "Il tag \\ individua la porzione di file di un *Canto*, il tag \\ individua un verso, il tag \\ individua una *forma flessa*, ciascuna forma flessa ha 1 o 2 attributi.\n", + "All'interno di un verso può essere presente il tag \\ che ha come content più elementi \\, ciascuno di essi contiene la stessa forma flessa ma differenti valori per gli attributi 'catg' e 'lemma'.\n", "\n", "per questa implementazione uso la libreria Python [Beatiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)." ] }, { "cell_type": "code", - "execution_count": 160, + "execution_count": 269, "metadata": {}, "outputs": [], "source": [ "class TEIFile(object):\n", - " def __init__(self, filename):\n", + " def __init__(self, filename, idres=0):\n", " self.filename = filename\n", " self.soup = read_tei(filename)\n", " self._text = None\n", + " self.idres=idres;\n", " # self._lemmas = None\n", " # self._lemma_lemmas = None\n", " # self._categ_lemmas = None\n", @@ -249,8 +256,7 @@ " lstlms=lstlms+ordr_lms[-1][2];\n", " ordr_lms.pop();\n", " \n", - " ordr_lms.append((\" \".join(lm_text.split()), lstctg, lstlms, canto.replace('\\n','').strip(), i, j, \"hdn:Works/Commedia/Cantica/1/\"+str(i),\n", - " \"hdn:Works/Commedia/Cantica/1/\"+str(i)+\"/#\"+str(j)));\n", + " ordr_lms.append((\" \".join(lm_text.split()), lstctg, lstlms, canto.replace('\\n','').strip(), i, j));\n", " \n", " \n", " # ordr_lms.append((\" \".join(lm_text.split()), \" \".join(ctg.split()), \" \".join(lemma.split()), canto.replace('\\n','').strip(), i, j, \"hdn:Works/Commedia/Cantica/1/\"+str(i),\n", @@ -258,7 +264,29 @@ " \n", " \n", " return ordr_lms\n", + " #IRI del verso\n", + " @property\n", + " def IRIverso(self):\n", + " iris = []\n", + " i=0\n", + " for div in self.soup.body.find_all(\"div1\"):\n", + " for verso in div.find_all('l'):\n", + " i=i+1;\n", + " verso_text=elem_to_text(verso).strip();\n", + " for vparent in verso.parents:\n", + " if (vparent.name=='div1'):\n", + " canto = vparent.contents[0];\n", + " iri_verso=\"http://hdn.dantenetwork.it/resource/work/commedia/cantica/\"+str(self.idres)+\"/\"+\"/\".join(canto.lower().split())+\"/verso/\"+str(i);\n", + " iri_verso=iri_verso+'\\n a efrbroo:F2_Expression ,\\n rdfs:Resource ; \\nhttp://erlangen-crm.org/current/P190_has_symbolic_content \"';\n", + " iri_verso=iri_verso+(\" \".join(verso_text.split())).strip()+ '\\\"^^xsd:string ;\\n http://erlangen-crm.org/current/P3_has_note';\n", + " iri_verso=iri_verso+' \"'+str(i)+'\"^^xsd:int ;\\n http://hdn.dantenetwork.it/resource/has_number \"'+str(i)+'\"^^xsd:int .'\n", + " iris.append((i, \" \".join(verso_text.split()), iri_verso));\n", + " \n", + " \n", + " return iris\n", " \n", + " \n", + " #test\n", " @property\n", " def ff_ea(self):\n", " lms_text = []\n", @@ -300,15 +328,15 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 235, "metadata": {}, "outputs": [], "source": [ - "def tei_to_csv_entry(tei_file):\n", - " tei = TEIFile(tei_file)\n", + "def tei_to_csv_entry(tei_file, idres=0):\n", + " tei = TEIFile(tei_file, idres)\n", " print(f\"Handled {tei_file}\")\n", " base_name = tei_file\n", - " return tei.orderedlemma, tei.categ_lemma, tei.lemma_lemma #, tei.abstract" + " return tei.orderedlemma, tei.IRIverso, tei.categ_lemma, tei.lemma_lemma #, tei.abstract" ] }, { @@ -321,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 164, + "execution_count": 219, "metadata": {}, "outputs": [ { @@ -359,7 +387,7 @@ } ], "source": [ - "tei = TEIFile('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/inferno_forparsing.xml')\n", + "tei = TEIFile('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/inferno_forparsing.xml', 1)\n", "bbs=tei.ff_ea\n", "for re in bbs:\n", " print (re, end=\"\\n\"*2)\n", @@ -373,12 +401,12 @@ "metadata": {}, "source": [ "### Carico il testo *inferno.xml* e creo una tabella\n", - "Eseguo il parsing del testo presente nel file e creo una tabella con le seguenti colonne: *lemma, categoria, lemma italiano, canto, verso, pposizione lemma nel verso, IRIVerso, IRIParola*" + "Eseguo il parsing del testo presente nel file e creo una tabella con le seguenti colonne: *forma flessa, categoria, lemma, canto, verso, pposizione forma flessa nel verso*" ] }, { "cell_type": "code", - "execution_count": 165, + "execution_count": 270, "metadata": {}, "outputs": [ { @@ -390,29 +418,27 @@ } ], "source": [ - "mytesto=tei_to_csv_entry('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/inferno_forparsing.xml')" + "mytesto=tei_to_csv_entry('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/inferno_forparsing.xml', 1)" ] }, { "cell_type": "code", - "execution_count": 166, + "execution_count": 271, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "FormaFlessa 33400\n", - "Categoria 33400\n", - "LemmaItaliano 33400\n", - "Canto 33400\n", - "Verso 33400\n", - "PosizioneLemmaNelVerso 33400\n", - "IRIVerso 33400\n", - "IRIParola 33400\n", + "FormaFlessa 33400\n", + "Categoria 33400\n", + "Lemma 33400\n", + "Canto 33400\n", + "Verso 33400\n", + "PosizioneFFNelVerso 33400\n", "dtype: int64" ] }, - "execution_count": 166, + "execution_count": 271, "metadata": {}, "output_type": "execute_result" } @@ -421,351 +447,13 @@ "data = [mytesto[0]]\n", "#data[0]\n", "dfObj = pd.DataFrame(data[0]) \n", - "testo_tabella=pd.DataFrame(data[0], columns = ['FormaFlessa' , 'Categoria', 'LemmaItaliano', 'Canto', 'Verso', 'PosizioneLemmaNelVerso', 'IRIVerso', 'IRIParola']) \n", + "testo_tabella=pd.DataFrame(data[0], columns = ['FormaFlessa' , 'Categoria', 'Lemma', 'Canto', 'Verso', 'PosizioneFFNelVerso']) \n", "testo_tabella.count()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Generiamo una tabella\n", - "\n", - "La abella contiene tutti i lemmi della cantica, insieme con le categorie, il lemma in italiano, il numero del verso, la posizione all'interno del verso e l'IRI del verso. Per l'IRI del verso mi son basato su quanto riportato nel *Manifesto*, Appendice 7: \n", - "\n", - "> l’IRI del primo verso del sesto libro dell’Eneide: hdn:Works\\Eneide\\Liber\\VI\\1\n", - "\n", - "una possibile struttura delle IRI per i versi della Cantica Inferno della Commedia \n", - "\n", - "hdn:Works\\Commedia\\Cantica\\1\\n\n", - "\n", - "dove n è il numero del verso. \n", - "\n", - "Si tratta di un esempio, è facilmente modficabile.\n", - "Link al criterio di definizione dell'IRI del verso\n", - "http://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/1" - ] - }, { "cell_type": "code", - "execution_count": 167, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
FormaFlessaCategoriaLemmaItalianoCantoVersoPosizioneLemmaNelVersoIRIVersoIRIParola
0Nel[rdms][il]Canto 111hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#1
1mezzo[eilaksl][in mezzo di]Canto 112hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#2
2del[rdms][il]Canto 113hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#3
3cammin[sm2ms][cammino]Canto 114hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#4
4di[epskg][di]Canto 115hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#5
5nostra[as1fs][nostro]Canto 116hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#6
6vita[sf1fs][vita]Canto 117hdn:Works/Commedia/Cantica/1/1hdn:Works/Commedia/Cantica/1/1/#7
7mi[pf1sypr][mi]Canto 121hdn:Works/Commedia/Cantica/1/2hdn:Works/Commedia/Cantica/1/2/#1
8ritrovai[vta+1irs1][ritrovare]Canto 122hdn:Works/Commedia/Cantica/1/2hdn:Works/Commedia/Cantica/1/2/#2
9per[epskpl][per]Canto 123hdn:Works/Commedia/Cantica/1/2hdn:Works/Commedia/Cantica/1/2/#3
\n", - "
" - ], - "text/plain": [ - " FormaFlessa Categoria LemmaItaliano Canto Verso \\\n", - "0 Nel [rdms] [il] Canto 1 1 \n", - "1 mezzo [eilaksl] [in mezzo di] Canto 1 1 \n", - "2 del [rdms] [il] Canto 1 1 \n", - "3 cammin [sm2ms] [cammino] Canto 1 1 \n", - "4 di [epskg] [di] Canto 1 1 \n", - "5 nostra [as1fs] [nostro] Canto 1 1 \n", - "6 vita [sf1fs] [vita] Canto 1 1 \n", - "7 mi [pf1sypr] [mi] Canto 1 2 \n", - "8 ritrovai [vta+1irs1] [ritrovare] Canto 1 2 \n", - "9 per [epskpl] [per] Canto 1 2 \n", - "\n", - " PosizioneLemmaNelVerso IRIVerso \\\n", - "0 1 hdn:Works/Commedia/Cantica/1/1 \n", - "1 2 hdn:Works/Commedia/Cantica/1/1 \n", - "2 3 hdn:Works/Commedia/Cantica/1/1 \n", - "3 4 hdn:Works/Commedia/Cantica/1/1 \n", - "4 5 hdn:Works/Commedia/Cantica/1/1 \n", - "5 6 hdn:Works/Commedia/Cantica/1/1 \n", - "6 7 hdn:Works/Commedia/Cantica/1/1 \n", - "7 1 hdn:Works/Commedia/Cantica/1/2 \n", - "8 2 hdn:Works/Commedia/Cantica/1/2 \n", - "9 3 hdn:Works/Commedia/Cantica/1/2 \n", - "\n", - " IRIParola \n", - "0 hdn:Works/Commedia/Cantica/1/1/#1 \n", - "1 hdn:Works/Commedia/Cantica/1/1/#2 \n", - "2 hdn:Works/Commedia/Cantica/1/1/#3 \n", - "3 hdn:Works/Commedia/Cantica/1/1/#4 \n", - "4 hdn:Works/Commedia/Cantica/1/1/#5 \n", - "5 hdn:Works/Commedia/Cantica/1/1/#6 \n", - "6 hdn:Works/Commedia/Cantica/1/1/#7 \n", - "7 hdn:Works/Commedia/Cantica/1/2/#1 \n", - "8 hdn:Works/Commedia/Cantica/1/2/#2 \n", - "9 hdn:Works/Commedia/Cantica/1/2/#3 " - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "testo_tabella.head(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### File *purgatorio.xml*\n", - "\n", - "Eseguiamo un test, la stampa dovrebbe fermarsi al termine *ingegno*.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('Per', 'epsf', 'per', 'Canto 1')\n", - "\n", - "('correr', 'vta2fp', 'correre', 'Canto 1')\n", - "\n", - "('miglior', 'a2fp', 'migliore', 'Canto 1')\n", - "\n", - "('acque', 'sf1fp', 'acqua', 'Canto 1')\n", - "\n", - "('alza', 'vta1ips3', 'alzare', 'Canto 1')\n", - "\n", - "('le', 'adfp', 'la', 'Canto 1')\n", - "\n", - "('vele', 'sf1fp', 'vela', 'Canto 1')\n", - "\n", - "('omai', 'b', 'ormai', 'Canto 1')\n", - "\n", - "('la', 'rdfs', 'la', 'Canto 1')\n", - "\n", - "('navicella', 'sf1fs', 'navicella', 'Canto 1')\n", - "\n", - "('del', 'epa', 'di', 'Canto 1')\n", - "\n", - "('del', 'rdms', 'il', 'Canto 1')\n", - "\n", - "('mio', 'as1ms', 'mio', 'Canto 1')\n", - "\n", - "('ingegno', 'sm2ms', 'ingegno', 'Canto 1')\n", - "\n", - "...\n" - ] - } - ], - "source": [ - "tei_purgatorio = TEIFile('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml')\n", - "bbs_pu=tei_purgatorio.ff_ea\n", - "for repu in bbs_pu:\n", - " print (repu, end=\"\\n\"*2)\n", - " if (repu[0].startswith('ingegno')):\n", - " print('...')\n", - " break" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Carico il testo *purgatorio.xml* e creo una tabella\n", - "Eseguo il parsing del testo presente nel file e creo una tabella simile alla precedente\n", - "\\ forma flessa con due lemmi, gestire nel parser" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Handled /Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml\n" - ] - } - ], - "source": [ - "parsed_purgatorio=tei_to_csv_entry('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml')" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "FormaFlessa 33245\n", - "Categoria 33245\n", - "Lemma 33245\n", - "Canto 33245\n", - "Verso 33245\n", - "PosizioneLemmaNelVerso 33245\n", - "IRIVerso 33245\n", - "IRIParola 33245\n", - "dtype: int64" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#DA COMPLETARE CON IRI CORRETTO!\n", - "\n", - "data_purgatorio = [parsed_purgatorio[0]]\n", - "#dfObj_purgatorio = pd.DataFrame(data_purgatorio[0]) \n", - "testo_purgatorio_tabella=pd.DataFrame(data_purgatorio[0], columns = ['FormaFlessa' , 'Categoria', 'Lemma', 'Canto', 'Verso', 'PosizioneLemmaNelVerso', 'IRIVerso', 'IRIParola']) \n", - "testo_purgatorio_tabella.count()" - ] - }, - { - "cell_type": "code", - "execution_count": 175, + "execution_count": 272, "metadata": {}, "outputs": [ { @@ -794,9 +482,368 @@ " Lemma\n", " Canto\n", " Verso\n", - " PosizioneLemmaNelVerso\n", - " IRIVerso\n", - " IRIParola\n", + " PosizioneFFNelVerso\n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " Nel\n", + " [rdms]\n", + " [il]\n", + " Canto 1\n", + " 1\n", + " 1\n", + " \n", + " \n", + " 1\n", + " mezzo\n", + " [eilaksl]\n", + " [in mezzo di]\n", + " Canto 1\n", + " 1\n", + " 2\n", + " \n", + " \n", + " 2\n", + " del\n", + " [rdms]\n", + " [il]\n", + " Canto 1\n", + " 1\n", + " 3\n", + " \n", + " \n", + " 3\n", + " cammin\n", + " [sm2ms]\n", + " [cammino]\n", + " Canto 1\n", + " 1\n", + " 4\n", + " \n", + " \n", + " 4\n", + " di\n", + " [epskg]\n", + " [di]\n", + " Canto 1\n", + " 1\n", + " 5\n", + " \n", + " \n", + " 5\n", + " nostra\n", + " [as1fs]\n", + " [nostro]\n", + " Canto 1\n", + " 1\n", + " 6\n", + " \n", + " \n", + " 6\n", + " vita\n", + " [sf1fs]\n", + " [vita]\n", + " Canto 1\n", + " 1\n", + " 7\n", + " \n", + " \n", + " 7\n", + " mi\n", + " [pf1sypr]\n", + " [mi]\n", + " Canto 1\n", + " 2\n", + " 1\n", + " \n", + " \n", + " 8\n", + " ritrovai\n", + " [vta+1irs1]\n", + " [ritrovare]\n", + " Canto 1\n", + " 2\n", + " 2\n", + " \n", + " \n", + " 9\n", + " per\n", + " [epskpl]\n", + " [per]\n", + " Canto 1\n", + " 2\n", + " 3\n", + " \n", + " \n", + "\n", + "" + ], + "text/plain": [ + " FormaFlessa Categoria Lemma Canto Verso PosizioneFFNelVerso\n", + "0 Nel [rdms] [il] Canto 1 1 1\n", + "1 mezzo [eilaksl] [in mezzo di] Canto 1 1 2\n", + "2 del [rdms] [il] Canto 1 1 3\n", + "3 cammin [sm2ms] [cammino] Canto 1 1 4\n", + "4 di [epskg] [di] Canto 1 1 5\n", + "5 nostra [as1fs] [nostro] Canto 1 1 6\n", + "6 vita [sf1fs] [vita] Canto 1 1 7\n", + "7 mi [pf1sypr] [mi] Canto 1 2 1\n", + "8 ritrovai [vta+1irs1] [ritrovare] Canto 1 2 2\n", + "9 per [epskpl] [per] Canto 1 2 3" + ] + }, + "execution_count": 272, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "testo_tabella.head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generiamo una tabella con gli IRI dei versi per la cantica *Inferno*\n", + "\n", + "La abella contiene il numero del verso, il verso e l'IRI del verso. \n", + "Per l'IRI del verso mi son basato su quanto riportato nel file *Commedia.rdf*, un esempio è il seguente: \n", + "\n", + "> \n", + "> a efrbroo:F2_Expression , rdfs:Resource ; \n", + "> \n", + "> \"Per li tre gradi sù di buona voglia\"^^xsd:string ; \n", + "> \n", + "> \"106\"^^xsd:int ; \n", + "> \n", + "> \"106\"^^xsd:int . \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 280, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "NumeroVerso 4721\n", + "Verso 4721\n", + "IRIVerso 4721\n", + "dtype: int64" + ] + }, + "execution_count": 280, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_IRI_versi_inf = [mytesto[1]]\n", + "#data_IRI_versi\n", + "df_IRI_versi_inf=pd.DataFrame(data_IRI_versi_inf[0], columns = ['NumeroVerso', 'Verso' , 'IRIVerso']) \n", + "df_IRI_versi_inf.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 282, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NumeroVerso Verso IRIVerso
01Nel mezzo del cammin di nostra vitahttp://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/1\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"Nel mezzo del cammin di nostra vita\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"1\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"1\"^^xsd:int .
12mi ritrovai per una selva oscurahttp://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/2\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"mi ritrovai per una selva oscura\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"2\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"2\"^^xsd:int .
23ché la diritta via era smarrita .http://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/3\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"ché la diritta via era smarrita .\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"3\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"3\"^^xsd:int .
34Ahi quanto a dir qual era è cosa durahttp://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/4\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"Ahi quanto a dir qual era è cosa dura\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"4\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"4\"^^xsd:int .
45esta selva selvaggia e aspra e fortehttp://hdn.dantenetwork.it/resource/work/commedia/cantica/1/canto/1/verso/5\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"esta selva selvaggia e aspra e forte\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"5\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"5\"^^xsd:int .
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 282, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_IRI_versi_inf.head().style.set_properties(subset=['IRIVerso'], **{'width': '400px'})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### File *purgatorio.xml*\n", + "\n", + "Test, ignorare.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 276, + "metadata": {}, + "outputs": [], + "source": [ + "#tei_purgatorio = TEIFile('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml', 2)\n", + "#bbs_pu=tei_purgatorio.IRIverso\n", + "#for repu in bbs_pu:\n", + "# print (repu, end=\"\\n\"*2)\n", + "# if (repu[0].startswith('che')):\n", + "# print('...')\n", + "# break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Carico il testo *purgatorio.xml* e creo una tabella\n", + "Eseguo il parsing del testo presente nel file e creo una tabella simile alla precedente\n", + "\\ forma flessa con due lemmi, gestire nel parser" + ] + }, + { + "cell_type": "code", + "execution_count": 277, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Handled /Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml\n" + ] + } + ], + "source": [ + "parsed_purgatorio=tei_to_csv_entry('/Users/cesare/Projects/hdn/triple/DanteTriple/xml/DanteSearch/grammaticale/purgatorio.xml', 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 278, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FormaFlessa 33245\n", + "Categoria 33245\n", + "Lemma 33245\n", + "Canto 33245\n", + "Verso 33245\n", + "PosizioneFFNelVerso 33245\n", + "dtype: int64" + ] + }, + "execution_count": 278, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#DA COMPLETARE CON IRI CORRETTO!\n", + "\n", + "data_purgatorio = [parsed_purgatorio[0]]\n", + "#dfObj_purgatorio = pd.DataFrame(data_purgatorio[0]) \n", + "testo_purgatorio_tabella=pd.DataFrame(data_purgatorio[0], columns = ['FormaFlessa' , 'Categoria', 'Lemma', 'Canto', 'Verso', 'PosizioneFFNelVerso']) \n", + "testo_purgatorio_tabella.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 279, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -808,8 +855,6 @@ " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -819,8 +864,6 @@ " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -830,8 +873,6 @@ " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -841,8 +882,6 @@ " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -852,8 +891,6 @@ " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", "
FormaFlessaCategoriaLemmaCantoVersoPosizioneFFNelVerso
Canto 3347553hdn:Works/Commedia/Cantica/1/4755hdn:Works/Commedia/Cantica/1/4755/#3
33241Canto 3347554hdn:Works/Commedia/Cantica/1/4755hdn:Works/Commedia/Cantica/1/4755/#4
33242Canto 3347555hdn:Works/Commedia/Cantica/1/4755hdn:Works/Commedia/Cantica/1/4755/#5
33243Canto 3347556hdn:Works/Commedia/Cantica/1/4755hdn:Works/Commedia/Cantica/1/4755/#6
33244Canto 3347557hdn:Works/Commedia/Cantica/1/4755hdn:Works/Commedia/Cantica/1/4755/#7
\n", @@ -867,22 +904,15 @@ "33243 alle [rdfp, epakml] [la, a] Canto 33 4755 \n", "33244 stelle [sf1fp] [stella] Canto 33 4755 \n", "\n", - " PosizioneLemmaNelVerso IRIVerso \\\n", - "33240 3 hdn:Works/Commedia/Cantica/1/4755 \n", - "33241 4 hdn:Works/Commedia/Cantica/1/4755 \n", - "33242 5 hdn:Works/Commedia/Cantica/1/4755 \n", - "33243 6 hdn:Works/Commedia/Cantica/1/4755 \n", - "33244 7 hdn:Works/Commedia/Cantica/1/4755 \n", - "\n", - " IRIParola \n", - "33240 hdn:Works/Commedia/Cantica/1/4755/#3 \n", - "33241 hdn:Works/Commedia/Cantica/1/4755/#4 \n", - "33242 hdn:Works/Commedia/Cantica/1/4755/#5 \n", - "33243 hdn:Works/Commedia/Cantica/1/4755/#6 \n", - "33244 hdn:Works/Commedia/Cantica/1/4755/#7 " + " PosizioneFFNelVerso \n", + "33240 3 \n", + "33241 4 \n", + "33242 5 \n", + "33243 6 \n", + "33244 7 " ] }, - "execution_count": 175, + "execution_count": 279, "metadata": {}, "output_type": "execute_result" } @@ -891,6 +921,123 @@ "testo_purgatorio_tabella.tail()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generiamo una tabella con gli IRI dei versi per la cantica *Purgatorio*\n", + "\n", + "La tabella contiene il numero del verso, il verso e l'IRI del verso. " + ] + }, + { + "cell_type": "code", + "execution_count": 284, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "NumeroVerso 4755\n", + "Verso 4755\n", + "IRIVerso 4755\n", + "dtype: int64" + ] + }, + "execution_count": 284, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_IRI_versi_pur = [parsed_purgatorio[1]]\n", + "#data_IRI_versi\n", + "df_IRI_versi_pur=pd.DataFrame(data_IRI_versi_pur[0], columns = ['NumeroVerso', 'Verso' , 'IRIVerso']) \n", + "df_IRI_versi_pur.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 285, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NumeroVerso Verso IRIVerso
01Per correr miglior acque alza le velehttp://hdn.dantenetwork.it/resource/work/commedia/cantica/2/canto/1/verso/1\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"Per correr miglior acque alza le vele\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"1\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"1\"^^xsd:int .
12omai la navicella del del mio ingegno ,http://hdn.dantenetwork.it/resource/work/commedia/cantica/2/canto/1/verso/2\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"omai la navicella del del mio ingegno ,\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"2\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"2\"^^xsd:int .
23che lascia dietro a sé mar sì crudele;http://hdn.dantenetwork.it/resource/work/commedia/cantica/2/canto/1/verso/3\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"che lascia dietro a sé mar sì crudele;\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"3\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"3\"^^xsd:int .
34e canterò di quel secondo regnohttp://hdn.dantenetwork.it/resource/work/commedia/cantica/2/canto/1/verso/4\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"e canterò di quel secondo regno\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"4\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"4\"^^xsd:int .
45dove l' umano spirito si purgahttp://hdn.dantenetwork.it/resource/work/commedia/cantica/2/canto/1/verso/5\n", + " a efrbroo:F2_Expression ,\n", + " rdfs:Resource ; \n", + "http://erlangen-crm.org/current/P190_has_symbolic_content \"dove l' umano spirito si purga\"^^xsd:string ;\n", + " http://erlangen-crm.org/current/P3_has_note \"5\"^^xsd:int ;\n", + " http://hdn.dantenetwork.it/resource/has_number \"5\"^^xsd:int .
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 285, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_IRI_versi_pur.head().style.set_properties(subset=['IRIVerso'], **{'width': '400px'})" + ] + }, { "cell_type": "code", "execution_count": null,