Lurkund

Om man skriver en uppsats eller en hemtenta på universitet eller högskola körs ofta dokumentet man skickar in genom tjänsten Urkund. Exakt hur denna tjänst funkar rent tekniskt är förmodligen en affärshemlighet, men på ett ungefär så funkar den så att den helt enkelt matchar text (ord, meningar, stycken) mot en gigantisk databas av tidigare texter. Som ”lärare” får man sedan en rapport, och om systemet upptäcker likheter mellan den inskickade texten och databasen får man en varning om att det kan röra sig om plagiat. Systemet är smidigt och jag har vid ett par tillfällen upptäckt plagierande studenter, i något fall så illa att det ledde till avstängning.

Att plagiera texter är motsatsen till tänkande och bör motverkas framförallt på intellektuell grund. När det sedan kommer till forskare själva handlar det även om att rätt person ska få erkännande för sina ursprungliga idéer. Men det är ju egentligen självklarheter.

Men hur ser det då ut för forskare själva? Dels gällande plagiat av andra forskare, men även självplagiat. I en tid då akademin som institution i allt högre utsträckning belönar stora kvantiteter av publicerade texter kan man även föreställa sig att antalet självplagieringar, framförallt mellan exempelvis konferenspapper och artiklar, salamipublicerade artiklar och diverse andra texter blir allt vanligare. Av tidsbrist återanvänds texter om och om igen, och eftersom det publiceras så mycket som ingen läser riktigt noga så hoppas plagiatforskaren på att det hela passerar obemärkt.

Men det är ju bara en spekulation. Jag funderar på om det hela skulle kunna testas empiriskt! Allt man behöver är texterna och ett system som funkar ungefär som Urkund. Jag har därför börjat testa mig fram för att bygga ”Lurkund” (se kodskiss på Github). Via databaser som Swepub, Web of Science, Scopus mfl. kan man åtminstone få tag på abstracts till artiklar (för fulltexter är man begränsad till Open Accesstidskrifter, om man inte vill bryta mot en massa regler) som sedan kan köras genom Lurkund.

Men problemet jag har är att matchning av text är väldigt kostsamt (eller så gör jag fel, vilket är mycket tänkbart). Som man kan läsa i denna Python3/Jupyter-notebook använder jag mig av två strategier: tokenisering på meningsnivå (NLTK sent_tokenize) samt strängmatchning med Difflib. Denna kombination funkar på en handfull dokument, vilket är smidigt om man vill kolla sina egna manuskript mot varandra. Men det blir ohållbart om man skalar upp det hela. Först måste tokeniseraren separera texten i meningar (att matcha enskilda ord mot varandra är meningslöst) och sedan ställer jag in difflibs sequence_matcher på ett tröskelvärde som måste uppfyllas innan skriptet flaggar för en träff. Detta tröskelvärde är viktigt eftersom en plagierande författare enkelt kan byta ut ett par ord i varje mening och på så sätt undgå kontrollen.

Är det någon som har tips om bibliotek eller algortimer som gör detta mera effektivt? Kommentera gärna. Kravet är att man ska kunna upptäcka liknande men inte nödvändigtvis exakt lika stycken av text och att det ska vara görbart på lite större textkorpus. Går det exempelvis att göra med Elasticsearch/Apache Solr? Hur tror ni Urkund gör?

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Time limit is exhausted. Please reload CAPTCHA.