Skip to content
This repository has been archived by the owner on Aug 1, 2022. It is now read-only.

Bibelstellensuche Technischer Überblick

ruschein edited this page Jul 5, 2017 · 7 revisions

Überblick

In den MARC21-Datensätzen sind z.T. die im innerhalb des Textes behandelten Bibelstellen hinterlegt. Die Bibestellensuche soll nun der Identifikation von Überschneidungen dienen, d.h. die Möglichkeit zur Verfügung stellen, ausgehend von einem angegebenen Bereich (z.B. Gen 1,5-17) alle Texte zu finden, die den Bereich vollständig oder in Teilen enthalten (z.B. Gen 1,1-20, Gen 1,7-12).

Dabei kann die Genauigkeit bis auf Versebene angegeben werden, wobei einzelne Verse durch eine Punktnotation getrennt werden können (z.B. Gen 1,1-3.4-5.7.9 umfasst Gen 1,1-3, Gen 1,4-5 und die Verse 7. und 9). Innerhalb eines Buches können vollständige Kapitelabschnitte durch eine Kommanotation angegeben werden (z.B. Gen 1-7, Gen 1,2-7,5).

Als Maß der Überschneidung (Scoring) wird die Summe der minimalen Abstände der Eingabe-Ranges zu den Ranges eines Ergebnisses genutzt, d.h. für jedes Abfrageteilintervall wird der Absolutbetrag der Summe der Differenzen linken und rechten Endpunkte bestimmt.

Image showing scoring

#Anpassungen VuFind Durch die Ersetzung des Standard-Solr-Query-Builders durch $VUFIND_HOME/module/ixTheo/src/ixTheo/Search/Backend/Solr/IxTheoQueryBuilder.php wird im Falle der Erkennung einer Bibelstelle die Anfrage so angepasst, dass bei der Verarbeitung in Solr der BibleRangeParser aufgerufen wird. Andernfalls wird die Anfrage unverändert an Solr durchgereicht. Hierfür war neben der Erstellung der Klasse IxTheoQueryBuilder das Hinzufügen von IxTheoSolrDefaultBackendFactory.phpin module/VuFind/config/module.config.php notwendig.

#Verarbeitung in Solr In die vufind-eigene Solr-Umgebung wurde ein zusätzliches Parserplugin integriert ($VUFIND_HOME/solr/lib/BibleRangeParser-x.x.x.jar).

Anpassungen

Folgende Klassen finden sich im Paket de.uni_tuebingen.ub.ixTheo:

BibleRangeParserPlugin

Dies ist der Einstiegspunkt von Solr. Dieses Plugin erstellt den BibleRangeParser und hat sonst keine weitere Funktion.

BibleRangeParser

Der Parser nimmt eine Anfrage des Users entgegen und generiert einen neuen Query. Diese Query besteht aus einer Lucene-Query, die in einer BibleRangeQuery geschachtelt wird, damit diese den Lucene-Query scoren kann. Die BibleRangeQuery wird dann mit einem FilterQuery anhand eines BibleRangeFilters gefiltert.

BibleRangeQuery

Diese Klasse erstellt den BibleRangeScoreProvider und hat sonst keine weitere Funktion.

BibleRangeScoreProvider

Um Ergebnisse einer Suche zu ordnen wird jedem Ergebniss ein Zahlenwert zugewiesen. Dies passiert in dieser Klasse. Dabei wird die Summe der minimalen Abstände der Eingabe-Ranges zu den Ranges eines Ergebnisses genutzt.

BibleRangeFilter

Mit diesem Filter werden alle Ergebnisse verworfen, welche zu keine Bibelstelle oder zu einer Bibelstelle, die nicht angefragt wurde, gehören.

Range

Die Range-Klasse beschreibt einen Bereich.

  • int getDistance(Range) errechnet einen Zahlenwert, der den 'Abstand' beschreibt, wenn die beiden Bereiche überlappen. Sonst wird Range.OUT_OF_RANGE zurückgegeben.
  • int getMinimumDistance(Range[]) errechnet den 'Abstand' zu den gegebenen Bereichen und gibt den kleinesten 'Abstand' zurück.
  • boolean intersects(Range) gibt an, ob sich die Bereiche überlappen.
  • static int getDistance(Range[], Range[]) berechnet die Summe der kleinsten Distanzen.
  • static boolean doAllSourceRangesIntersectsSomeTargetRanges(Range[], Range[]) prüft ob sich jeder Bereich des ersten Arguments mindestens mit einem Bereich des zweiten Arguments schneidet.

BibleRange

Ist auch eine Range, die Zusatzfunktionen für die Bibelstellensuche bereit hält, da diese nur Strings als Eingaben hat.

  • Range(String) erzeugt einen Bereich durch das Interpretieren des Strings. Der String muss aus 15 Zeichen bestehen, wobei die ersten sieben Zeichen die untere Schranke und die letzten sieben Zeichen die obere Schranke darstellen. Das Zeichen in der Mitte wird zur Lesebarkeit als Trennzeichen beliebig gefüllt.
  • Range[] getRanges(String[]) erzeugt aus jedem String ein Range. Dabei muss der String das beim Konstruktur beschriebene Format haben.
  • Range[] getRanges(String, String) Das erste Argument ist ein Text, in dem Bereiche kodiert und mit einem Trennzeichen getrennt sind. Dieses Trennzeichen wird im zweiten Argument angegeben.