Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for #63 Consider mn and mfn genders #64

Merged
merged 4 commits into from Aug 9, 2018
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,64 @@
/*******************************************************************************
* Copyright 2013
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tudarmstadt.ukp.jwktl.parser.de.components;

import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

import de.tudarmstadt.ukp.jwktl.api.util.GrammaticalGender;

public enum DEGendersText {

M("m", GrammaticalGender.MASCULINE),
F("f", GrammaticalGender.FEMININE),
N("n", GrammaticalGender.NEUTER),
SAECHLICH("sächlich", GrammaticalGender.NEUTER),
MF("mf", GrammaticalGender.MASCULINE, GrammaticalGender.FEMININE),
MN_DOT("mn.", GrammaticalGender.MASCULINE, GrammaticalGender.NEUTER),
MN("mn", GrammaticalGender.MASCULINE, GrammaticalGender.NEUTER),
FM("fm", GrammaticalGender.FEMININE, GrammaticalGender.MASCULINE),
FN("fn", GrammaticalGender.FEMININE, GrammaticalGender.NEUTER),
NM("nm", GrammaticalGender.NEUTER, GrammaticalGender.MASCULINE),
NF("nf", GrammaticalGender.NEUTER, GrammaticalGender.FEMININE),
MFN("mfn", GrammaticalGender.MASCULINE, GrammaticalGender.FEMININE, GrammaticalGender.NEUTER);

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to keep compatibility to DEPartOfSpeechHandler, let's add "w" => FEM as well (see line 102 in the original code)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, w just does not seem to occur anymore.

private final String genderText;
private final List<GrammaticalGender> genders;

private DEGendersText(String genderText, GrammaticalGender... genders) {
this.genderText = genderText;
this.genders = Collections.unmodifiableList(Arrays.asList(genders));
}

public List<GrammaticalGender> asGrammaticalGenders() {
return this.genders;
}

public static DEGendersText of(String genderText) {
Objects.requireNonNull(genderText, "genderText must not be null");
for (DEGendersText value : values()) {
if (Objects.equals(genderText, value.genderText)) {
return value;
}
}
throw new IllegalArgumentException(MessageFormat.format("Unrecognized gender text [{0}].", genderText));
}
}
Expand Up @@ -17,8 +17,10 @@
******************************************************************************/
package de.tudarmstadt.ukp.jwktl.parser.de.components;

import java.text.MessageFormat;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -36,6 +38,8 @@
*/
public class DEPartOfSpeechHandler extends DEBlockHandler {

private static final Logger logger = Logger.getLogger(DEPartOfSpeechHandler.class.getName());

protected static final Pattern POS_PATTERN = Pattern.compile("\\{\\{Wortart\\|([^\\|\\}]+)(?:\\|([^\\|\\}]+))?\\}\\}");
protected static final Pattern GENDER_PATTERN = Pattern.compile("\\b(?:\\{\\{)?([mfnw]+\\.?|sächlich)(?:\\}\\})?\\.?\\b");

Expand Down Expand Up @@ -96,45 +100,14 @@ public boolean processHead(final String text, final ParsingContext context) {
Matcher matcher = GENDER_PATTERN.matcher(textLine);
while (matcher.find()) {
String genderText = matcher.group(1);
if ("m".equals(genderText))
genders.add(GrammaticalGender.MASCULINE);
else
if ("f".equals(genderText) || "w".equals(genderText))
genders.add(GrammaticalGender.FEMININE);
else
if ("n".equals(genderText) || "sächlich".equals(genderText))
genders.add(GrammaticalGender.NEUTER);
else
if ("mf".equals(genderText)) {
genders.add(GrammaticalGender.MASCULINE);
genders.add(GrammaticalGender.FEMININE);
}
else
if ("mn.".equals(genderText)) {
genders.add(GrammaticalGender.MASCULINE);
genders.add(GrammaticalGender.NEUTER);
}
else
if ("fm".equals(genderText)) {
genders.add(GrammaticalGender.FEMININE);
genders.add(GrammaticalGender.MASCULINE);
}
else
if ("fn".equals(genderText)) {
genders.add(GrammaticalGender.FEMININE);
genders.add(GrammaticalGender.NEUTER);
try {
List<GrammaticalGender> gendersFromGenderText = DEGendersText.of(genderText)
.asGrammaticalGenders();
genders.addAll(gendersFromGenderText);
} catch (IllegalArgumentException unrecognizedGenderTextException) {
logger.warning(MessageFormat.format("Page [{0}] contains unrecognized gender text [{1}].",
context.getPage().getTitle(), genderText));
}
else
if ("nm".equals(genderText)) {
genders.add(GrammaticalGender.NEUTER);
genders.add(GrammaticalGender.MASCULINE);
}
else
if ("nf".equals(genderText)) {
genders.add(GrammaticalGender.NEUTER);
genders.add(GrammaticalGender.FEMININE);
}

}

return true;
Expand Down
Expand Up @@ -17,6 +17,8 @@
******************************************************************************/
package de.tudarmstadt.ukp.jwktl.parser.de;

import java.util.Arrays;

import de.tudarmstadt.ukp.jwktl.api.IWiktionaryEntry;
import de.tudarmstadt.ukp.jwktl.api.IWiktionaryPage;
import de.tudarmstadt.ukp.jwktl.api.util.GrammaticalGender;
Expand Down Expand Up @@ -64,4 +66,19 @@ public void testNutella() throws Exception {
assertEquals(GrammaticalGender.NEUTER, entry.getGenders().get(2));
}

}
/***/
public void testTetragraph() throws Exception {
IWiktionaryPage page = parse("Tetragraph.txt");
IWiktionaryEntry entry = page.getEntry(0);
assertEquals(GrammaticalGender.MASCULINE, entry.getGender());
assertEquals(Arrays.asList(GrammaticalGender.MASCULINE, GrammaticalGender.NEUTER), entry.getGenders());
}

/***/
public void testFlipchart() throws Exception {
IWiktionaryPage page = parse("Flipchart.txt");
IWiktionaryEntry entry = page.getEntry(0);
assertEquals(GrammaticalGender.MASCULINE, entry.getGender());
assertEquals(Arrays.asList(GrammaticalGender.MASCULINE, GrammaticalGender.FEMININE, GrammaticalGender.NEUTER), entry.getGenders());
}
}
61 changes: 61 additions & 0 deletions src/test/resources/articles-de/Flipchart.txt
@@ -0,0 +1,61 @@
== Flipchart ({{Sprache|Deutsch}}) ==
=== {{Wortart|Substantiv|Deutsch}}, {{mfn}} ===

{{Deutsch Substantiv Übersicht
|Genus 1=n
|Genus 2=m
|Genus 3=f
|Nominativ Singular 1=Flipchart
|Nominativ Singular 2=Flipchart
|Nominativ Singular 3=Flipchart
|Nominativ Plural=Flipcharts
|Genitiv Singular 1=Flipcharts
|Genitiv Singular 2=Flipcharts
|Genitiv Singular 3=Flipchart
|Genitiv Plural=Flipcharts
|Dativ Singular 1=Flipchart
|Dativ Singular 2=Flipchart
|Dativ Singular 3=Flipchart
|Dativ Plural=Flipcharts
|Akkusativ Singular 1=Flipchart
|Akkusativ Singular 2=Flipchart
|Akkusativ Singular 3=Flipchart
|Akkusativ Plural=Flipcharts
|Bild=Flipchart1-Asio.JPG|180px|1|Ein Flipchart
}}

{{Alternative Schreibweisen}}
:[[Flip-Chart]]

{{Worttrennung}}
:Flip·chart, {{Pl.}} Flip·charts

{{Aussprache}}
:{{IPA}} {{Lautschrift|ˈflɪpʧaːɐ̯t}}, {{Lautschrift|ˈflɪpʧaʁt}}
:{{Hörbeispiele}} {{Audio|De-Flipchart.ogg}}

{{Bedeutungen}}
:[1] ein großer auf einem Gestell befestigter Papierblock, dessen Blätter man beschreiben und nach hinten umblättern kann

{{Herkunft}}
:von dem englischen Begriff [[flip chart]] (deutsch: [[Umblätterdiagramm]]) mit gleicher Bedeutung

{{Beispiele}}
:[1] Während des Vortrags zeichnete er den neuen Arbeitsablauf auf einem ''Flipchart'' auf.

{{Absatz}}
==== {{Übersetzungen}} ====
{{Ü-Tabelle|Ü-links=
*{{en}}: [1] {{Ü|en|flip chart}}
|Ü-rechts=
*{{fr}}: [] {{Ü|fr|}}
*{{sv}}: [1] {{Ü|sv|blädderblock}}
}}

{{Referenzen}}
:[1] {{Wikipedia|Flipchart}}
:[*] {{Ref-Canoo|Flipchart}}
:[1] {{Ref-UniLeipzig|Flipchart}}
:[1] {{Ref-Duden|Flipchart}}

[[Kategorie:Entlehnung aus dem Englischen (Deutsch)]]
58 changes: 58 additions & 0 deletions src/test/resources/articles-de/Tetragraph.txt
@@ -0,0 +1,58 @@
== Tetragraph ({{Sprache|Deutsch}}) ==
=== {{Wortart|Substantiv|Deutsch}}, {{mn}} ===

{{Deutsch Substantiv Übersicht
|Genus 1=m
|Genus 2=n
|Nominativ Singular 1=Tetragraph
|Nominativ Singular 2=Tetragraph
|Nominativ Plural=Tetragraphen
|Genitiv Singular 1=Tetragraphen
|Genitiv Singular 2=Tetragraphs
|Genitiv Plural=Tetragraphen
|Dativ Singular 1=Tetragraphen
|Dativ Singular 2=Tetragraph
|Dativ Plural=Tetragraphen
|Akkusativ Singular 1=Tetragraphen
|Akkusativ Singular 2=Tetragraph
|Akkusativ Plural=Tetragraphen
}}

{{Alternative Schreibweisen}}
:[[Tetragraf]]

{{Worttrennung}}
:Te·t·ra·graph, {{Pl.}} Te·t·ra·gra·phen

{{Aussprache}}
:{{IPA}} {{Lautschrift|tetʀaˈɡʀaːf}}
:{{Hörbeispiele}} {{Audio|}}
:{{Reime}} {{Reim|aːf|Deutsch}}

{{Bedeutungen}}
:[1] ''[[Linguistik]]:'' Folge von vier Buchstaben, die einen einzigen Laut repräsentieren

{{Gegenwörter}}
:[1] [[Digraph]], [[Trigraph]]

{{Oberbegriffe}}
:[1] [[Graph]]

{{Beispiele}}
:[1] Im Deutschen steht der ''Tetragraph'' "tsch" für den Laut [ʧ].
:[1] „»Der obligatorische Wechsel zum Kyrillischen hat groteske Verrenkungen erforderlich gemacht, so die Verwendung von diakritischen Zeichen, von Digraphen, Trigraphen und sogar - zur Darstellung des entstimmten aspirierten labialisierten uvularen Plosivs im Kabardinischen - von einem ''Tetragraphen''«.“&lt;ref>{{Literatur | Autor=Jonathan Littell | Titel=Die Wohlgesinnten | Verlag=Berliner Taschenbuch Verlag | Ort=Berlin | Jahr=2009 (französisches Original 2006)| ISBN=978-3-8333-0628-0}}, Seite 306f.&lt;/ref>

==== {{Übersetzungen}} ====
{{Ü-Tabelle|Ü-links=
*{{en}}: [1] {{Ü|en|}}
*{{fr}}: [1] {{Ü|fr|}}
|Ü-rechts=
*{{es}}: [1] {{Ü|es|}}
}}

{{Referenzen}}
:[1] {{Wikipedia|Digraph (Linguistik)#Trigraph, Tetragraph, …}}

{{Quellen}}

[[Kategorie:Fremdwort]]