Posted on feb. 18, 2018 | 0 comments

These were all gone. GONE.

M-a pus Satana să upgradez Mendeley azi. De la v. 1.17.11 la v. 1.17.13. Concluzia a fost că după ce a făcut sync mi-au dispărut câteva foldere și studii de sociologie salvate. Mă uit pe serverul Mendeley – aceeași chestie. Nervi. Bun – ca norocul avem opțiunea de a merge la Help > Restore backup. Ultimul backup îl aveam din data de 12 februarie 2018. Dau restore. problema e că fix în 12 februarie terminasem de citit o carte de sociologie pentru teza mea de doctorat și făcusem ultimele adnotări. Iar backup-ul conținea doar prima jumătate din acele adnotări. Cum fac rost eu de toate notițele și highlight-urile din acel PDF?

Două modalități, și ambele implică un al doilea laptop deconectat de la net. Am un Dell Mini v. 1018 cu Mendeley pe el și avea încă baza de date veche. Fac backup manual de siguranță la întreg folderul. Deconectat de la net și citind pe Google pe celălalt laptop am văzut că există opțiune de a export un PDF cu adnotări și highlight-uri ca să poată fi citit cu alte aplicații care deschid PDF-uri. Așa că:

1. Am deschis PDF-ul cu pricina în Mendeley și de la File am selectat Export PDF with Annotations. Așa măcar am o copie de siguranță.

Problema e că eu voiam PDF-ul cu adnotările în Mendeley. Dacă imporți PDF-ul exportat înapoi în Mendeley, adnotările nu mai apar, că-s salvate într-un .SQL. Cum să le export în ceva ca să le import apoi în Mendeley? Așa că:

2. Căutând pe net am dat peste scriptul Python de mai jos:

import sqlite3 as lite  
user_mail = "example@mail.com"  
path = "/home/USER/.local/share/data/Mendeley Ltd./Mendeley Desktop/{0}@www.mendeley.com.sqlite".format(user_mail)

con = lite.connect(path)  
cur = con.cursor()

cur.execute("SELECT id, title FROM Documents")  
documents = cur.fetchall()

cur.execute("SELECT id, documentId, page, note, createdTime, modifiedTime FROM FileNotes")  
notes = cur.fetchall()

import pandas as pd  
df = pd.DataFrame(data=notes, columns=["id", "documentId", "page", "note", "createdTime", "modifiedTime"])

documents = dict(documents)  
df.documentId = df.documentId.map(documents)

def to_string(df, *filename):  
    """
    Returns notes in nice formated string

    If filename is given, it saves string to this file
    """

    vyslstr = ""
    for name, note in df.iterrows():
        type(note)
        vyslstr += """
ID: {0}|File: {1}|Page: {2}  
{3}
        """.format(note.id, note.documentId, note.page, note.note)

    if filename:
        with open(filename[0], mode="w", encoding="utf-8") as fout:
            fout.write(vyslstr)
    return(vyslstr)

def to_csv(df):  
    "Detailed output to csv file"

    df.to_csv("notes_mendeley.csv")

to_csv(df)  
to_string(df, "notes_mendeley.txt")

Scriptul exportă toate adnotările (în UTF8, might I add) în format TXT și CSV. De înlocuit ce-i cu bold în script: adresa e-mail cu care te loghezi în Mendeley și path-ul către folderul Mendeley (/home/cypress/.local/share/data/Mendeley Ltd./Mendeley Desktop/în cazul meu).

Am salvat scriptul în ceva de genul mendeley.export.py, l-am făcut executabil cu chmod +x mendeley.export.py. Funcționează cu Python 3 iar eu aveam pe Dell Mini Python 2.7 setat ca default. Așa că

alias python='/usr/bin/python3.5'

După care e necesar să instalezi un pachet numit ”pandas” și o faci cu pip3 care trebuie mai întâi instalat:

sudo apt install python3-pip

apoi

pip3 install pandas

apoi lansăm scriptul cu

python mendeley.export.py

iar asta va genera două fișiere: notes_mendeley.txt și notes_mendeley.csv care conțin toate adnotările din SQL-ul Mendeley, cu diacritice cu tot.

Și-așa am salvat chestia la care lucrasem câteva ore bune, că adnotările din cartea aceea de sociologie erau prețioase.