Zum Hauptinhalt springen
Eine Abfrage legt fest, welche Wörter oder Wortkombinationen ein Dokument enthalten muss. Die von Extraktionsskripten verwendete Abfragesprache basiert auf XML.
<Request>
<Query>
<Contain>
<Required>
<Form><Text>first</Text></Form>
</Required>
<Optional>
<Form><Text>second</Text></Form>
</Optional>
<Except>
<Query>
<Contain>
<Required>
<Form><Text>third</Text></Form>
</Required>
<Optional>
<Form><Text>fourth</Text></Form>
</Optional>
</Contain>
</Query>
</Except>
</Contain>
</Query>
</Request>
  • <Request> — Dies ist das Wurzelelement einer Abfrage.
  • <Query> — Dies ist eine einfache Abfrage. Eine einfache Abfrage enthält einen Abfragebaum, der bestimmte Bedingungen definiert, die von der gesuchten Wortkombination erfüllt werden müssen. Eine einfache Abfrage kann Teil einer Kombination von Wortformen in einer übergeordneten Abfrage sein. Dies ist ein erforderliches Element.
  • <Contain> — Gibt an, welche Wörter oder Wortkombinationen ein Dokument enthalten muss. Eine Abfrage darf nur ein <Contain>-Element enthalten. Dies ist ein erforderliches Element. Dieses Element kann eine beliebige Anzahl der folgenden Elemente in beliebiger Reihenfolge enthalten:
    • <Required> — Gibt eine Wortform oder Unterabfrage an, die eine Wortkombination enthalten muss. Dies ist ein optionales Element.
    • <Optional> — Gibt eine Wortform oder Unterabfrage an, die eine Wortkombination enthalten kann. Dies ist ein optionales Element.
    • <Except> — Gibt eine Wortform oder Unterabfrage an, die eine Wortkombination nicht enthalten darf. Dies ist ein optionales Element.
Jedes der oben genannten Elemente muss eines der folgenden Elemente enthalten:
  • <Query> — Gibt an, ob eine Folge von Wortformen in die Wortkombination einbezogen oder daraus ausgeschlossen werden muss.
  • <Form> — Gibt an, ob eine Wortform in eine Wortkombination einbezogen oder daraus ausgeschlossen werden muss.
Das <Contain>-Element muss mindestens ein <Required>- oder <Optional>-Element enthalten.

Attribute des Tags <Contain>

Zusätzliche Einschränkungen für Kombinationen von Wortformen können in den Attributen des Tags <Contain> festgelegt werden.

MinCount-Attribut für die Mindestanzahl von Elementen in einer Kombination von Wortformen

Die Mindestanzahl von Elementen in einer Kombination von Wortformen kann im Attribut MinCount angegeben werden. Jedes Element ist entweder eine Wortform oder eine von der Unterabfrage zurückgegebene Folge von Wortformen. Der Standardwert des Attributs ist 1. Der Wert dieses Parameters darf nicht größer sein als die Gesamtzahl der <Required>- und <Optional>-Elemente in der betreffenden Kombination von Wortformen. Dieser Parameter ist nützlich, wenn eine Kombination von Wortformen ein oder mehrere <Optional>-Elemente enthält.
<Query>
<Contain>
<Optional>
<Form><Text>first</Text></Form>
</Optional>
<Optional>
<Form><Text>second</Text></Form>
</Optional>
</Contain>
</Query>
<Query>
<Contain MinCount="3">
<Optional>
<Form><Text>US</Text></Form>
</Optional>
<Required>
<Form><Text>President</Text></Form>
</Required>
<Optional>
<Form><Text>Barack</Text></Form>
</Optional>
<Required>
<Form><Text>Obama</Text></Form>
</Required>
</Contain>
</Query>
Die obige Abfrage findet die folgenden Wortgruppen: „US President Barack Obama“, „President Barack Obama“ und „US President Obama“.

KeepOrder-Attribut für eine feste Reihenfolge von Elementen in einer Kombination von Wortformen

Um anzugeben, dass die Reihenfolge von Elementen in einer Kombination von Wortformen festgelegt ist, können Sie das KeepOrder-Attribut vom Typ Boolean verwenden. Der Standardwert des Attributs ist false.
<Query>
<Contain KeepOrder="true">
<Required>
<Form><Text>first</Text></Form>
</Required>
<Required>
<Form><Text>second</Text></Form>
</Required>
<Required>
<Form><Text>third</Text></Form>
</Required>
</Contain>
</Query>
Die Kombination „first third second third“ entspricht nicht der Abfrage, obwohl die Abfrage eine Wortfolge in der erforderlichen Reihenfolge enthält. KeepOrder gilt auch für alle <Except>-Elemente. Wörter, die den <Except>-Elementen in einer Abfrage entsprechen, dürfen nicht zwischen den Wörtern vorkommen, die sie in der Abfrage voneinander trennen; sie dürfen jedoch an beliebigen anderen Positionen außerhalb der Abfragestrings mit fester Reihenfolge vorkommen. Wenn wir beispielsweise die obige Abfrage so ändern, dass die Wortform „second“ statt in ein <Required>- in ein <Except>-Element eingefügt wird, dann entspricht ein Dokument, das die Kombination der Wortformen „first third second“ enthält, der Abfrage (die Wortform „second“ wird jedoch nicht in das Ergebnis aufgenommen). Wenn wir die obige Abfrage zusätzlich ändern, indem wir das KeepOrder-Attribut entfernen, wird ein Dokument, das die Kombination der Wortformen „first third second“ enthält, nicht in das Ergebnis aufgenommen, weil die Wortform „second“ nirgendwo im Text des Dokuments vorkommen darf.

MinDistance- und MaxDistance-Attribute zum Angeben von Abständen

Die Attribute MinDistance und MaxDistance geben die minimalen und maximalen Abstände zwischen Wörtern in einer Abfrage an. Diese Attribute haben keine Standardwerte. Wenn eines der beiden Attribute nicht angegeben wird, gelten keine Abstandsbeschränkungen. Der Abstand zwischen Wörtern wird in Wörtern gemessen und als Differenz der Positionen der beiden entsprechenden Wörter berechnet. Der Abstand zwischen zwei benachbarten Wörtern beträgt 1, daher ist der Mindestwert jedes der beiden Attribute 1. MaxDistance muss größer oder gleich MinDistance sein. Der Abstand zwischen zwei Wortfolgen wird wie folgt berechnet. Wenn sich die Wortfolgen nicht überschneiden, wird der Abstand als Differenz zwischen der Position des am weitesten links stehenden Worts in der rechten Wortfolge und der Position des am weitesten rechts stehenden Worts in der linken Wortfolge berechnet. Wenn sich die Wortfolgen überschneiden, wird der Abstand als 0 angenommen. So beträgt beispielsweise in der Phrase „The quick brown fox jumped over the lazy dog“ der Abstand zwischen den Wortfolgen „quick fox“ und „lazy dog“ 4, und der Abstand zwischen den Wortfolgen „quick fox“ und „brown lazy dog“ ist 0. Für <Except>-Elemente wird der Abstand zwischen Wörtern wie folgt berechnet:
  • Wenn KeepOrder=“true,” darf das Wort nicht innerhalb des angegebenen Abstands zu den benachbarten Wörtern in der Wortfolge vorkommen (d. h. zu den Wörtern, zwischen denen es in der Abfrage vorkommt). Gleichzeitig muss der Abstand zwischen den Nachbarwörtern des <Except>-Elements innerhalb des angegebenen Bereichs liegen.
  • Wenn **KeepOrder=“**false,” darf das Wort nicht innerhalb des angegebenen Abstands zu irgendeinem anderen Wort in der Wortfolge vorkommen.
<Query>
<Contain KeepOrder="true" MaxDistance="2">
<Required>
<Form><Text>sodium /Text></Form>
</Required>
<Except>
<Form><Text>tetraborate</Text></Form>
</Except>
<Optional>
<Form><Text>carborate</Text></Form>
</Optional>
<Optional>
<Form><Text>sulfate</Text></Form>
</Optional>
<Required>
<Form><Text>decahydrate</Text></Form>
</Required>
</Contain>
</Query>
Diese Abfrage findet Phrasen wie „sodium carborate decahydrate“ und „sodium sulfate decahydrate“.
<Query>
<Contain KeepOrder="false" MaxDistance="2">
<Required>
<Form><Text>sodium /Text></Form>
</Required>
<Except>
<Form><Text>tetraborate</Text></Form>
</Except>
<Optional>
<Form><Text>carborate</Text></Form>
</Optional>
<Optional>
<Form><Text>sulfate</Text></Form>
</Optional>
<Required>
<Form><Text>decahydrate</Text></Form>
</Required>
</Contain>
</Query>
Diese Abfrage findet nur „sodium sulfate decahydrate“, weil das Wort „tetraborate“ in den Tags <Except></Except> steht und der maximale Abstand zwischen „tetraborate“ und „sodium“ zwei Wörter beträgt.

<Form>-Element zum Abrufen einer Wortform

Eine Abfrage für eine Wortform wird mit einem <Form>-Element angegeben. Dieses Element kann die folgenden Elemente enthalten:
  • <Attributes> — Ein optionales Element, das eine Abfrage für die Attribute einer Wortform enthält.
  • <Text> — Ein optionales Element, das den Unicode-Text einer Wortform enthält. Wenn im Text kein Wort angegeben ist, entspricht jedes Wort der Abfrage, das mit der Attributabfrage übereinstimmt; in diesem Fall ist die Attributabfrage erforderlich.
  • Zusätzliche Suchbedingungen für eine Wortform können in den Attributen des Tags <Form> angegeben werden.
Die Art der Wortformsuche kann im Attribut SearchType des Tags <Form> angegeben werden. Dieses Attribut kann die folgenden Werte haben:
  • AllFormsSearch – Das Programm sucht nach allen Formen des angegebenen Worts.
  • ExactSearch – Das Programm sucht nur nach der angegebenen Form des Worts.
  • PrefixSearch – Das Programm sucht nach beliebigen Wortformen mit der angegebenen Zeichenfolge als Präfix.
  • FuzzySearch – Das Programm führt eine Fuzzy-Suche nach dem angegebenen Wort durch. FuzzySearch kann nützlich sein, wenn Grund zu der Annahme besteht, dass Ihre Texte OCR-Fehler enthalten könnten und ExactSearch daher nicht funktioniert. FuzzySearch kann nur für Wörter mit mindestens 3 Zeichen verwendet werden. Bei Wörtern mit einer Länge zwischen 3 und 5 Zeichen erlaubt FuzzySearch 1 OCR-Fehler. Bei Wörtern mit mehr als 5 Zeichen erlaubt FuzzySearch bis zu 2 OCR-Fehler.
  • FuzzyPrefixSearch – Das Programm führt eine Fuzzy-Suche nach beliebigen Wörtern mit der angegebenen Zeichenfolge als Präfix durch.
Das Attribut SearchType ist optional und standardmäßig auf AllFormsSearch gesetzt.

Attribut CaseSensitive für die Groß-/Kleinschreibung beachtende Suchen

Für Suchen unter Beachtung der Groß-/Kleinschreibung kann das Attribut CaseSensitive des Tags <Form> verwendet werden. Dieses Attribut ist optional und standardmäßig auf false gesetzt.
<Query>
<Contain KeepOrder="true">
<Required>
<Form SearchType="ExactSearch" CaseSensitive="true">
<Text>WHO</Text>
</Form>
</Required>
</Contain>
</Query>
Diese Abfrage sucht nach dem Akronym WHO genau in dieser Schreibweise. So lässt sich eine große Zahl redundanter Ergebnisse vermeiden, die „who“, „whom“ oder „whose“ enthalten.

<Attributes>-Element zum Abrufen von Wortformattributen

Eine Abfrage für Wortformattribute ist ein logischer Ausdruck, der mit den Operatoren AND, OR und NOT aufgebaut wird. NOT ist ein unärer Operator, während AND und OR n-stellig sind. Die Operanden dieses logischen Ausdrucks sind Werte vom Typ Bool. Dieser logische Ausdruck wird in Form eines Baums dargestellt. Das Ergebnis der Abfrage sind die Wortformen im Text eines Dokuments, die diesen logischen Ausdruck erfüllen. Zum Abrufen von Wortformattributen wird ein <Attributes>-Element verwendet. Dieses Element kann die folgenden Elemente enthalten:
  • <Attribute> — Dieses Element enthält den Text des erforderlichen Wortattributs. Es ist ein Blatt im Baum des logischen Ausdrucks.
  • <Or> ­— Der ODER-Operator ist ein Knoten im Baum.
  • <And> — Der AND-Operator ist ein Knoten im Baum.
  • <Not> — Der NOT-Operator ist ein Knoten im Baum.
Das Element <Not> wird genauso aufgebaut wie das Element <Attributes> und darf nur eines der oben genannten Elemente enthalten. Die Elemente <Or> und <And> müssen mindestens zwei der oben genannten Elemente enthalten. Das Tag <Attribute> hat ein optionales Attribut SearchType, das die Art der Attributsuche angibt. Dieses Attribut kann die folgenden Werte haben:
  • ExactSearch — Das Programm sucht nach dem Attribut genau in der Form, die in der Abfrage angegeben ist.
  • PrefixSearch — Das Programm sucht nach allen Attributen, die mit dem angegebenen Text beginnen.
Bei der Attributsuche wird immer zwischen Groß- und Kleinschreibung unterschieden. Das Attribut SearchType ist standardmäßig auf ExactSearch festgelegt. Angenommen, wir haben ein Dokument, in dem wir bereits Folgendes identifiziert haben:
  • NER-Objekte (durch Aufrufen der Funktion ExtractNerObjects)
  • Wortformen aus einem Benutzerwörterbuch namens „dictionary“ (durch Aufrufen der Funktion ExtractWordsFromUserDictionary)
  • alle Objekte, die einem regulären Ausdruck entsprechen, den wir als Parameter übergeben haben (durch Aufrufen der Funktion ExtractRegularExpression)
Nehmen wir außerdem an, dass die resultierende Sammlung dieser Objekte „regExp“ heißt.
Der Name der Sammlung kann in XML-Abfragen verwendet werden, die für das indizierte Dokument ausgeführt werden. Auf die resultierende Sammlung selbst kann über ihren Namen zugegriffen werden.
<Query>
<Contain>
<Required>
<Form>
<Attributes>
<Attribute>regExp1</Attribute>
</Attributes>
</Form>
</Required>
<Required>
<Form>
<Attributes>
<And>
<Attribute>NerOrg1</Attribute>
<Not>
<Attribute> dictionary1</Attribute>
</Not>
</And>
</Attributes>
</Form>
</Required>
</Contain>
</Query>
Diese Abfrage sucht nach einer Wortfolge aus zwei Wörtern, bei der das erste Wort dem angegebenen regulären Ausdruck entsprechen muss und das zweite ein zulässiger Organisationsname ist. Die Ziffern hinter den Attributnamen dienen dazu, die gesuchten Wörter in erkannten mehrwortigen Objekten zu unterscheiden, die mit den entsprechenden Attributen indiziert wurden. So kann zum Beispiel ein regulärer Ausdruck mit dem Namen „date“ ein Datum im Format „May 31, 2019“ finden. Dann entspricht date 1 dem Wort „May“, date 2 dem Wort „31“ und date 3 dem Wort „2019“.

<FormSet>-Element zum Abrufen einer Menge von Wortformen

Eine Abfrage für mehrere Wortformen wird mithilfe eines <FormSet>-Elements angegeben. Diese Art von Abfrage kombiniert mehrere Abfragen für einzelne Formen mit OR. Sie entspricht einer <Query>-Abfrage, bei der alle Unterabfragen optionale Wortformabfragen sind. Bei einer <FormSet>-Abfrage können Sie jedoch eine Attributabfrage angeben, die für alle Formen gemeinsam ist. Das macht Suchvorgänge effizienter, wenn ExactSearch verwendet wird, um alle Wortformen zu finden, für jede Form eine Attributabfrage vorhanden ist und all diese Attributabfragen ein gemeinsames Fragment enthalten. Ein <FormSet>-Element enthält die folgenden Elemente:
  • <Attributes> — Dies ist ein optionales Element, das eine Abfrage für Formattribute enthält. Diese Abfrage wird mit den Attributabfragen der Formen per AND kombiniert.
  • <Form> — Dies ist ein erforderliches Element, das eine Abfrage für eine Wortform enthält. Ein <FormSet>-Element muss mindestens ein <Form>-Element enthalten.

Beispiel für eine XML-Abfrage zur Adress-Extraktion

Das Ergebnis einer Abfrage zur Adress-Extraktion ist eine Textzeichenfolge, die das erste Wort des Landes, das erste Wort der Straße, das erste Wort der Stadt, das erste Wort des Bundesstaats und das erste Wort der Postleitzahl enthält (in dieser Reihenfolge und sofern die einzelnen Wörter jeweils nicht mehr als 5 Wörter voneinander entfernt sind). Die Folge zusammenhängender Wörter, aus denen eine Komponente besteht (z. B. ein Straßenname), wird im Index zusätzlich nummeriert, beginnend mit 1.
var xmlQuery = "<Request> \
<Query> \
     <Contain MaxDistance=\"5\" KeepOrder=\"true\"> \
          <Optional> \
               <Form><Attributes><Attribute>NerCountry1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerStreet1</Attribute></Attributes></Form> \
          </Optional> \
               <Form><Attributes><Attribute>NerCity1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerState1</Attribute></Attributes></Form> \
          </Optional> \
          <Required> \
               <Form><Attributes><Attribute>NerZipCode1</Attribute></Attributes></Form> \
          </Required> \
     </Contain> \
</Query> \
</Request>";
Das Ergebnis einer Abfrage zur Adress-Extraktion wird im wiederholbaren Feld xmlQueryResult gespeichert: this.RunQueryAndSaveToField( xmlQuery, “query”, “xmlQueryResult” );