{"id":459,"date":"2024-06-01T12:02:49","date_gmt":"2024-06-01T10:02:49","guid":{"rendered":"http:\/\/192.168.1.232\/?post_type=docs&#038;p=459"},"modified":"2024-06-17T19:37:22","modified_gmt":"2024-06-17T17:37:22","slug":"beispiel-entity-tagger","status":"publish","type":"docs","link":"https:\/\/biffo.de\/index.php\/titel\/nuzung-biffo\/modules\/beispiel-entity-tagger\/","title":{"rendered":"Beispiel Entity-Tagger"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Beispiel Entity-Tagger<\/h2>\n\n\n\n<p>Wie im Vorfeld bereits beschrieben, k\u00f6nnen Inhalte von Dokumenten f\u00fcr die automatische Zuordnung von &#8222;Title&#8220; (Dokument-Name), &#8222;KeyWords&#8220; und &#8222;DocumentDate&#8220; (Dokumenten-Datum) verwendet werden.<\/p>\n\n\n\n<p>Das Modul soll in einem Dokument nach dem Text &#8222;Vodafone&#8220; suchen, in die Keywords dann &#8222;Vodafone&#8220; eintragen und dann abschlie\u00dfend den Tag &#8222;Vodafone&#8220; zuweisen.<\/p>\n\n\n\n<p>Das Beispiel beruht auf Eclipse (der Autor nutzt seit Jahren Eclipse und ist damit zufrieden).<\/p>\n\n\n\n<p>F\u00fcr die Umsetzung werden die Jar-File &#8222;dmsapi.jar&#8220; und &#8222;dms.jar&#8220; ben\u00f6tigt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"359\" height=\"224\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/05\/grafik-101.png\" alt=\"\" class=\"wp-image-464\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/05\/grafik-101.png 359w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/05\/grafik-101-300x187.png 300w\" sizes=\"(max-width: 359px) 100vw, 359px\" \/><\/figure>\n\n\n\n<p>Um das Modul dem System bekannt zu machen, m\u00fcssen einige Annotation&#8217;s bei der Deklaration gesetzten werden:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Annotation<\/td><td>Verwendung (Target)<\/td><td>Beschreibung<\/td><\/tr><tr><td>@ProcessName<\/td><td>TYPE<\/td><td>Name des Moduls z.B.<br>@ProcessName(value = &#8222;Vodafone Tagger&#8220;)<\/td><\/tr><tr><td>@ProcessAuthor<\/td><td>TYPE<\/td><td>Name des Autors, die Webseite, die Major und Minor-Version z.B. @ProcessAuthor(author = &#8222;mlange&#8220;, url = &#8222;www.biffo.de&#8220;, major = 0, minor = 1 )<\/td><\/tr><tr><td>@Description<\/td><td>TYPE<\/td><td>Eine Beschreibung des Moduls z.B.<br>@Description(&#8222;Sucht nach dem Text Vodafone&#8220;)<\/td><\/tr><tr><td>@ConfiguredTag<\/td><td>FIELD<\/td><td>Wie soll der zugeordnete Tag aussehen z.B.<br>@ConfiguredTag(tagvalue=&#8220;Vodafone&#8220;, bgcolor=&#8220;#ff2020&#8243;, fgcolor=&#8220;#ffffff&#8220;)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Der Definitionsblock w\u00fcrde dann wie folgt umgesetzt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"169\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik.png\" alt=\"\" class=\"wp-image-488\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik.png 650w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-300x78.png 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<p>Die einzig wirklich relevanten Funktionen in dem Beispiel sind:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Funktion<\/td><td>Beschreibung<\/td><\/tr><tr><td>addTag<\/td><td>Tags werden vor Ausf\u00fchrung mit den bereits existierenden Tags (&#8222;Men\u00fc-&gt;Tags&#8220;) abgeglichen und an die Funktion zur Verwendung zugewiesen. Bei einem erfolgreichen Erkennen der Funktion doText erfolgt dann die Zuordnung des definierten Tags \u00fcber getTags.<\/td><\/tr><tr><td>doText<\/td><td>Hauptroutine zur Bestimmung der Inhalte. Bei Ausf\u00fchrung werden vom System nur die erste Seite oder alle Dokument-Seiten \u00fcbergeben. In diesem Beispiel wird gezielt nach dem Fragment &#8222;Vodafone&#8220; gesucht. Bei einem Treffer erfolgt die R\u00fcckgabe als &#8222;True&#8220; ansonsten &#8222;False&#8220;.<\/td><\/tr><tr><td>getKeyWords<\/td><td>Beinhaltet die KeyWords, welche der Entit\u00e4t Dokument zugeordnet werden sollen<\/td><\/tr><tr><td>getTags<\/td><td>siehe addTag<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Das beschriebene Modul k\u00f6nnte daher wie folgt implementiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package de.biffo.tagger;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.LinkedList;\nimport java.util.List;\n\nimport org.biffo.dms.api.ConfiguredTag;\nimport org.biffo.dms.api.Description;\nimport org.biffo.dms.api.IDocumentEntity;\nimport org.biffo.dms.api.ProcessAuthor;\nimport org.biffo.dms.api.ProcessName;\nimport org.biffo.dms.entity.Fragments.Fragment;\nimport org.biffo.dms.entity.Tags.Tag;\n\n@ProcessName(value = \"Vodafone Tagger\")\n@ProcessAuthor(author = \"mlange\", url = \"www.biffo.de\", major = 0, minor = 1)\n@Description(\"Sucht nach dem Text Vodafone\")\npublic class vodafonetagger implements IDocumentEntity, Serializable {\n\n\tprivate static final long serialVersionUID = 1L;\n\n\t@ConfiguredTag(tagvalue=\"Vodafone\", bgcolor=\"#ff2020\", fgcolor=\"#ffffff\")\n\tpublic Tag tVodafone;\n\t\n\tprivate String keyWords;\n\tprivate List&lt;Tag&gt; lstTags = new LinkedList&lt;Tag&gt;();\n\t\n\t@Override\n\tpublic void addTag(Tag tagToAdd) {\n\t\tlstTags.add(tagToAdd);\n\t}\n\n\t@Override\n\tpublic boolean doText(String inputText) {\n\t\tif(inputText==null) return false;\n\t\tif(inputText.length()==0) return false;\n\t\t\n\t\tif(inputText.toLowerCase().contains(\"vodafone\")) {\n\t\t\tkeyWords =\"Vodafone\";\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\n\t@Override\n\tpublic Date getDocumentDatum() {\n\t\treturn null;\n\t}\n\n\t@Override\n\tpublic List&lt;Fragment&gt; getFragments() {\n\t\treturn null;\n\t}\n\n\t@Override\n\tpublic String getKeyWords() {\n\t\treturn keyWords;\n\t}\n\n\t@Override\n\tpublic double getScore() {\n\t\treturn -1;\n\t}\n\n\t@Override\n\tpublic List&lt;Tag&gt; getTags() {\n\t\treturn lstTags;\n\t}\n\n\t@Override\n\tpublic String getTitle() {\n\t\treturn null;\n\t}\n\n\t@Override\n\tpublic boolean hasFragments() {\n\t\treturn false;\n\t}\n\n\t@Override\n\tpublic void init() throws Exception {\n\t}\n\n}\n<\/code><\/pre>\n\n\n\n<p>Nachdem das Modul als JAR exportiert wurde, kann es \u00fcber den Modul-Upload dem System bekannt gemacht und genutzt werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"813\" height=\"712\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-1.png\" alt=\"\" class=\"wp-image-489\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-1.png 813w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-1-300x263.png 300w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-1-768x673.png 768w\" sizes=\"(max-width: 813px) 100vw, 813px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"258\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-2-1024x258.png\" alt=\"\" class=\"wp-image-490\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-2-1024x258.png 1024w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-2-300x76.png 300w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-2-768x194.png 768w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-2.png 1431w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Das Modul l\u00e4sst sich nach einem Test (siehe Moduls \/ Test Modul) auf ausgew\u00e4hlte Dokumente, innerhalb der Dokumentansicht, oder in einer Import-Routine nutzen.<\/p>\n\n\n\n<ol>\n<li>Drag&amp;Drop &#8222;de.biffo.tagger.vodafonetagger&#8220; auf ein Dokument.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"497\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-3.png\" alt=\"\" class=\"wp-image-491\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-3.png 577w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-3-300x258.png 300w\" sizes=\"(max-width: 577px) 100vw, 577px\" \/><\/figure>\n\n\n\n<p>2. Modul startet auf dem jeweiligen Dokument.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"435\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-5-1024x435.png\" alt=\"\" class=\"wp-image-493\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-5-1024x435.png 1024w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-5-300x127.png 300w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-5-768x326.png 768w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-5.png 1110w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>3. Nach erfolgreicher Erkennung des Texts &#8222;Vodafone&#8220;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"505\" height=\"455\" src=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-4.png\" alt=\"\" class=\"wp-image-492\" srcset=\"https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-4.png 505w, https:\/\/biffo.de\/wp-content\/uploads\/2024\/06\/grafik-4-300x270.png 300w\" sizes=\"(max-width: 505px) 100vw, 505px\" \/><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Bereitgestellte Funktionen von &#8222;IDocumentEntity&#8220; und deren Nutzung:<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">addTag<\/h3>\n\n\n\n<p>Beim Starten des Moduls z.B. mittels Import-Prozess, werden Tags die mittels @ConfigureTag dem Modul zugeordnet wurden, innerhalb der Tabelle dms_tags ermittelt und bei erfolgreichem Abschluss der &#8222;doText&#8220; Routine dem Dokument zugeordnet. Sollte die Farbgebung innerhalb der Applikation ge\u00e4ndert worden sein, so werden FG- und BG-Farben aus dem System herangezogen. Die Farbgebung innerhalb @ConfigureTag hat keinen Einfluss mehr.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>Tag<\/td><td>void<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">doText<\/h3>\n\n\n\n<p>Routine zur \u00dcberpr\u00fcfung der einzelnen Seitentexte des jeweiligen Dokumentes, auf den das Modul angewendet wurde. Das Modul kann f\u00fcr die Verwendung Aller oder nur der ersten Seite in den Moduleinstellungen konfiguriert werden. <\/p>\n\n\n\n<p>Bei R\u00fcckgabe von &#8222;true&#8220; werden die Funktionen &#8222;getDocumentDatum&#8220;, &#8222;getKeyWords&#8220; und &#8222;getTitle&#8220; auf das gerade im Zugriff befindliche Dokument angewendet und die Entit\u00e4t entsp. abge\u00e4ndert. Ferner wird die Routine &#8222;getTags&#8220; und &#8222;getFragments&#8220; ausgef\u00fchrt und im Bedarfsfalls die Werte \u00fcbermittelt.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>String<\/td><td>boolean<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getDocumentDatum<\/h3>\n\n\n\n<p>Liefert ein dem Dokument zuzuordnendes Datum (Dokumenten Datum). Falls R\u00fcckgabe &#8222;null&#8220; wird der Datumswert nicht ge\u00e4ndert.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>Date<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getFragments<\/h3>\n\n\n\n<p>Liefert eine Liste mit generierten Fragmenten, die w\u00e4hrend des Aufrufs der &#8222;doText&#8220; Funktion erstellt wurden. Die generierten Fragmente werden vor Speicherung auf ein m\u00f6gliches Vorhandensein \u00fcberpr\u00fcft und ggf. mit  bestehende Fragmente ersetzt und mit dem Dokument verkn\u00fcpft.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>List&lt;Fragment&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getKeyWords<\/h3>\n\n\n\n<p>Liefert dem Dokument zuzuordnende Keywords. Bei der R\u00fcckgabe von &#8222;null&#8220; werden die KeyWords nicht ver\u00e4ndert.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>String<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getScore<\/h3>\n\n\n\n<p>Liefert einen %-Wert des gefundenen Ergebnisses. <\/p>\n\n\n\n<p>Derzeit noch keine Verwendung.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>double<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getTags<\/h3>\n\n\n\n<p>Liste mit Tags, welche dem Dokumente im Falle eines positiven &#8222;doText&#8220; zugeordnet werden solle. Die Liste wird automatisch vor Ausf\u00fchrung.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>List&lt;Tag&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">getTitle<\/h3>\n\n\n\n<p>Liefert ein Textwert, der dem Dokument als Dokument-Name zugeordnet werden soll. Falls R\u00fcckgabe &#8222;null&#8220; wird der Name nicht ge\u00e4ndert.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>String<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">hasFragments<\/h3>\n\n\n\n<p>Positive R\u00fcckgabe, falls Fragmente dem Ergebnis der &#8222;doText&#8220; Funktion zugeordnet werden k\u00f6nnen. Falls Fragment aufgebaut wurden und die R\u00fcckgabe &#8222;false&#8220; liefert, erfolgt keine Verarbeitung der Fragmente.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>boolean<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">init<\/h3>\n\n\n\n<p>Wird beim Laden des Moduls in den Hauptspeicher ausgef\u00fchrt. Hier\u00fcber k\u00f6nnen z.B. dynamisch Open-NLP Modelle geladen werden.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Eingabe<\/strong><\/td><td><strong>R\u00fcckgabe<\/strong><\/td><\/tr><tr><td>None<\/td><td>None<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel Metro-Tagger<\/h2>\n\n\n\n<p>Der Metro-Tagger sucht nach dem vorher bestimmten Muster &#8222;25.04.2020\/048\/0\/0\/0004\/021615&#8220; innerhalb der \u00fcbergebenen Texte. Das verwendete NLP-Modell wurde anhand von 6 vorhandenen und eingescannten Metro-Rechnungen trainiert und dem Tagger innerhalb des JAR-Files mitgegeben (siehe &#8222;init()&#8220;). Der Code ist im Vergleich zu dem Vodafone-Tagger etwas umfangreicher, dennoch entf\u00e4llt die aufwendige Logik mittels RegEx und anschlie\u00dfenden Parsing.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@ProcessName(value = \"Metro Tagger\")\n@ProcessAuthor(author = \"mlange\", url = \"www.biffo.de\", major = 0, minor = 5)\n@Description(\"Sucht nach einem bestimmten String innerhalb einer Metro Rechnung \"\n\t\t+ \"und liefert entsp. die gew\u00fcnschten Informationen zur\u00fcck\")\npublic class MetroTagger implements IDocumentEntity, Serializable {\n \n\tprivate static final long serialVersionUID = 1L;\n\n\t\/\/  25.04.2020\/048\/0\/0\/0004\/021615\n\t\n\t@ConfiguredTag(tagvalue = \"METRO\", bgcolor = \"#394d99\", fgcolor = \"#f8ed07\")\n\tpublic Tag tag1; \n\n\t\/\/ Datumsformat f\u00fcr den Dokument-Name\n\tprivate final static SimpleDateFormat _sdf = new SimpleDateFormat(\"dd.MM.yyyy\");\n\t\n\t\/\/ Aufbau des Dokumenten-Namens\n\tprivate String docTitlePattern=\"METRO_RECHNUNG_&lt;DocumentDate&gt;\";\n\tprivate Date documentDatum;\n\tprivate String keyWords;\n\tprivate List&lt;Tag&gt; lstTags = new LinkedList&lt;Tag&gt;();\n\tprivate List&lt;Fragment&gt; lstFragments = new LinkedList&lt;Fragment&gt;();\n\t\n\t\/\/ Open-NLP Routinen\n\tprivate transient TokenNameFinderModel _model;\n\tprivate transient NameFinderME _nameDetector;\n\t\n\tprivate double score;\n\t\n\tpublic MetroTagger() {\n\t}\n\t\n\t@Override\n\tpublic void init() throws Exception {\n\t\t\/\/ Laden des NLP-Models direkt aus dem JAR-File\n\t\tString packageName = this.getClass().getPackageName();\n\t\tpackageName = packageName.replaceAll(\"\\\\.\", \"\/\");\n\t\tInputStream input = this.getClass().getClassLoader().getResourceAsStream(packageName+\"\/metro_NAIVEBAYES.bin\");\n\n\t\t\/\/ Initialisierung der Open-NLP Funktionen\n\t\t_model = new TokenNameFinderModel(input);\n\t\t_nameDetector = new NameFinderME(_model);\n\t}\n\t\n\t\n\t@Override\n\tpublic String getTitle() {\n\t\tString temp = docTitlePattern;\n\t\tif(documentDatum!=null) {\n\t\t\ttemp = temp.replaceAll(\"&lt;DocumentDate&gt;\", _sdf.format(getDocumentDatum()));\n\t\t}\n\t\treturn temp;\n\t}\n\n\t@Override\n\tpublic Date getDocumentDatum() {\n\t\treturn documentDatum;\n\t}\n\n\t@Override\n\tpublic String getKeyWords() {\n\t\treturn keyWords;\n\t}\n\t\n\t@Override\n\tpublic double getScore() {\n\t\treturn score;\n\t}\n\n\t@Override\n\tpublic boolean doText(String input) {\n\t\tboolean found=false;\n\t\ttry {\n\t\t\tclearAll();\n\t\t\tString contentIn = input;\n\t\t\t\n\t\t\t\/\/ \u00dcbergabe des Seitentextes an die Open-NLP Funktion\n\t\t\tString &#91;] sentence = WhitespaceTokenizer.INSTANCE.tokenize(contentIn);\n\t\t\tSpan nameSpans&#91;] = _nameDetector.find(sentence);\n\t\n\t\t\t\/\/ Falls ein Fragment erkannt wurde, wird dieses weiterverabeitet\n\t\t\tif(null!=nameSpans &amp;&amp; nameSpans.length&gt;0) {\n\t\t\t\tSpan nameSpan = nameSpans&#91;0];\n\t\t\t\tscore = nameSpan.getProb();\n\t\t\t\tint fromWord =nameSpan.getStart();\n\t\t\t\tint toWord=nameSpan.getEnd();\n\t\t\n\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\tfor(int i=fromWord;i&lt;toWord;i++) {\n\t\t\t\t\tsb.append(sentence&#91;i]);\n\t\t\t\t\tsb.append(\" \");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\/\/ \u00dcberpr\u00fcfung ob das gefundene Fragment auch den Aufbau einer Metro-Rechnungsnummer hat\n\t\t\t\tfound= parseTag(sb.toString(), nameSpan);\n\t\t\t}\n\t\t\t_nameDetector.clearAdaptiveData();\n\t\t}catch(Exception e) {\n\t\t}\n\t\treturn found;\n\t}\n\t\n\t\n\n\t\n\t\n\tprivate boolean parseTag(String strIn, Span nameSpan) {\n\t\tif(null==strIn || strIn.isEmpty()) return false;\n\t\t\n\t\t\n\t\tString temp = strIn.trim();\n\t\ttemp = temp.replaceAll(\" \", \"\");\n\t\t\n\t\tFragment fragment = new Fragment();\n\t\tfragment.setErstelltVon(this.getClass().getSimpleName());\n\t\tfragment.setGeaendertVon(fragment.getErstelltVon());\n\t\t\n\t\tfragment.setFragmentname(nameSpan.getType());\n\t\tfragment.setFragmentvalue(strIn);\n\t\tfragment.setValid(true);\n\t\tfragment.setFragmenttype(\"IDocumentFragments\");\n\t\tfragment.setProbability(nameSpan.getProb());\n\t\tfragment.setPage(-1);\n\t\tlstFragments.add(fragment);\n\n\t\t\/\/ Pattern dd.MM.yyyy\/000\/0\/0\/0000\/000000\n\t\tString strArr&#91;] = temp.split(\"\\\\\/\");\n\t\tif(strArr.length!=6) return false;\n\n\t\ttry {\n\t\t\tdocumentDatum = _sdf.parse(strArr&#91;0]);\n\t\t\treturn true;\n\t\t}catch(Exception e) {\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tprivate void clearAll() {\n\t\tkeyWords = null;\n\t\tdocumentDatum = null;\n\t\tscore = 0;\n\t\tlstFragments.clear();\n\t}\n\n\t@Override\n\tpublic List&lt;Tag&gt; getTags() {\n\t\treturn lstTags;\n\t}\n\n\t@Override\n\tpublic void addTag(Tag tagToAdd) {\n\t\tlstTags.add(tagToAdd);\n\t}\n\n\t@Override\n\tpublic boolean hasFragments() {\n\t\tif(lstFragments.size()&gt;0) return true;\n\t\treturn false;\n\t}\n\n\t@Override\n\tpublic List&lt;Fragment&gt; getFragments() {\n\t\treturn lstFragments;\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"has-accent-3-color has-text-color has-link-color wp-elements-8ca813c30b486e25bc5641f388cda263\">Der Aufbau und das Trainieren von NLP-Modellen ist nicht Bestandteil dieser Dokumentation.<\/p>\n","protected":false},"featured_media":0,"parent":426,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"positive":"","negative":"","footnotes":""},"docs_category":[],"_links":{"self":[{"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs\/459"}],"collection":[{"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/comments?post=459"}],"version-history":[{"count":15,"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs\/459\/revisions"}],"predecessor-version":[{"id":1002,"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs\/459\/revisions\/1002"}],"up":[{"embeddable":true,"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs\/426"}],"wp:attachment":[{"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/media?parent=459"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/biffo.de\/index.php\/wp-json\/wp\/v2\/docs_category?post=459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}