Skip to content

Commit f9b16d9

Browse files
committed
Taxonomy: added rejection of name types
1 parent 850f494 commit f9b16d9

File tree

9 files changed

+114
-11
lines changed

9 files changed

+114
-11
lines changed

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/dict/BuildDictionary.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import fr.inra.maiage.bibliome.util.taxonomy.Taxon;
4040
import fr.inra.maiage.bibliome.util.taxonomy.reject.RejectDisjunction;
4141
import fr.inra.maiage.bibliome.util.taxonomy.reject.RejectName;
42-
import fr.inra.maiage.bibliome.util.taxonomy.reject.RejectNone;
42+
import fr.inra.maiage.bibliome.util.taxonomy.reject.RejectNameType;
4343
import fr.inra.maiage.bibliome.util.taxonomy.saturate.Saturate;
4444

4545
/**
@@ -50,6 +50,7 @@
5050
public class BuildDictionary extends CLIOParser {
5151
private final Collection<File> nodesFiles = new ArrayList<File>();
5252
private final Collection<File> namesFiles = new ArrayList<File>();
53+
private final Collection<String> rejectedNameTypes = new ArrayList<String>();
5354
private File saturationFile;
5455
private File rejectionFile;
5556
private final List<TaxonNamePattern> pattern = new ArrayList<TaxonNamePattern>(Arrays.asList(
@@ -73,6 +74,11 @@ protected boolean processArgument(String arg) throws CLIOException {
7374
return false;
7475
}
7576

77+
@CLIOption("-rejectNameType")
78+
public void addRejectedNameType(String nameType) {
79+
this.rejectedNameTypes.add(nameType);
80+
}
81+
7682
@CLIOption("-prefix")
7783
public void setIdPrefix(String idPrefix) {
7884
this.idPrefix = idPrefix;
@@ -226,9 +232,14 @@ public static void main(String[] args) throws CLIOException, IOException, Invali
226232
}
227233

228234
/* Name filter and synonym generation */
229-
RejectName reject = RejectNone.INSTANCE;
230-
if (inst.rejectionFile != null)
231-
reject = new RejectDisjunction(taxonomy.readReject(logger, inst.rejectionFile));
235+
RejectDisjunction rejects = new RejectDisjunction();
236+
if (inst.rejectionFile != null) {
237+
rejects.add(taxonomy.readReject(logger, inst.rejectionFile));
238+
}
239+
if (!inst.rejectedNameTypes.isEmpty()) {
240+
rejects.add(new RejectNameType(inst.rejectedNameTypes));
241+
}
242+
RejectName reject = rejects.simplify();
232243
for (File f : inst.namesFiles) {
233244
taxonomy.readNames(logger, f, reject);
234245
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectConjunction.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,17 @@ public RejectConjunction(RejectName first, RejectName second) {
3838
public boolean reject(String taxid, Name name) {
3939
return first.reject(taxid, name) && second.reject(taxid, name);
4040
}
41+
42+
@Override
43+
public RejectName simplify() {
44+
RejectName first = this.first.simplify();
45+
RejectName second = this.second.simplify();
46+
if (first.equals(RejectNone.INSTANCE)) {
47+
return RejectNone.INSTANCE;
48+
}
49+
if (second.equals(RejectNone.INSTANCE)) {
50+
return RejectNone.INSTANCE;
51+
}
52+
return new RejectConjunction(first, second);
53+
}
4154
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectDisjunction.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@
1616

1717
package fr.inra.maiage.bibliome.util.taxonomy.reject;
1818

19+
import java.util.ArrayList;
1920
import java.util.Collection;
21+
import java.util.List;
2022

2123
import fr.inra.maiage.bibliome.util.taxonomy.Name;
2224

2325
public class RejectDisjunction implements RejectName {
2426
private final Collection<RejectName> rejects;
25-
27+
28+
public RejectDisjunction() {
29+
this(new ArrayList<RejectName>());
30+
}
31+
2632
public RejectDisjunction(Collection<RejectName> rejects) {
2733
super();
2834
this.rejects = rejects;
@@ -35,4 +41,30 @@ public boolean reject(String taxid, Name name) {
3541
return true;
3642
return false;
3743
}
44+
45+
public void add(RejectName reject) {
46+
rejects.add(reject);
47+
}
48+
49+
public void add(Collection<RejectName> rejects) {
50+
this.rejects.addAll(rejects);
51+
}
52+
53+
@Override
54+
public RejectName simplify() {
55+
List<RejectName> rejects = new ArrayList<RejectName>(this.rejects.size());
56+
for (RejectName rn : this.rejects) {
57+
RejectName srn = rn.simplify();
58+
if (!srn.equals(RejectNone.INSTANCE)) {
59+
rejects.add(srn);
60+
}
61+
}
62+
if (rejects.isEmpty()) {
63+
return RejectNone.INSTANCE;
64+
}
65+
if (rejects.size() == 1) {
66+
return rejects.get(0);
67+
}
68+
return new RejectDisjunction(rejects);
69+
}
3870
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectName.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ public interface RejectName {
3030
* @param name
3131
*/
3232
boolean reject(String taxid, Name name);
33+
34+
RejectName simplify();
3335
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectNamePattern.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,9 @@ public RejectNamePattern(Pattern pattern) {
4141
public boolean reject(String taxid, Name name) {
4242
return pattern.matcher(name.name).matches();
4343
}
44+
45+
@Override
46+
public RejectName simplify() {
47+
return this;
48+
}
4449
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package fr.inra.maiage.bibliome.util.taxonomy.reject;
2+
3+
import java.util.Arrays;
4+
import java.util.Collection;
5+
import java.util.HashSet;
6+
7+
import fr.inra.maiage.bibliome.util.taxonomy.Name;
8+
9+
public class RejectNameType implements RejectName {
10+
private final Collection<String> nameTypes = new HashSet<String>();
11+
12+
public RejectNameType(String... nameTypes) {
13+
this(Arrays.asList(nameTypes));
14+
}
15+
16+
public RejectNameType(Collection<String> nameTypes) {
17+
this.nameTypes.addAll(nameTypes);
18+
}
19+
20+
@Override
21+
public boolean reject(String taxid, Name name) {
22+
return nameTypes.contains(name.type);
23+
}
24+
25+
@Override
26+
public RejectName simplify() {
27+
if (nameTypes.isEmpty()) {
28+
return RejectNone.INSTANCE;
29+
}
30+
return this;
31+
}
32+
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectNone.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818

1919
import fr.inra.maiage.bibliome.util.taxonomy.Name;
2020

21-
public class RejectNone implements RejectName {
22-
public static final RejectNone INSTANCE = new RejectNone();
23-
24-
private RejectNone() {
25-
super();
26-
}
21+
public enum RejectNone implements RejectName {
22+
INSTANCE;
2723

2824
@Override
2925
public boolean reject(String taxid, Name name) {
3026
return false;
3127
}
28+
29+
@Override
30+
public RejectName simplify() {
31+
return this;
32+
}
3233
}

src/main/java/fr/inra/maiage/bibliome/util/taxonomy/reject/RejectTaxid.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,9 @@ public RejectTaxid(String taxid) {
3939
public boolean reject(String taxid, Name name) {
4040
return this.taxid.equals(taxid);
4141
}
42+
43+
@Override
44+
public RejectName simplify() {
45+
return this;
46+
}
4247
}

src/main/resources/fr/inra/maiage/bibliome/util/taxonomy/dict/BuildDictionaryHelp.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ options = Options:
2727
-saturationFile.help = path to the saturation patterns file
2828
-rejectionFile.args = FILE
2929
-rejectionFile.help = path to rejected names file
30+
-rejectNameType.args = TYPE
31+
-rejectNameType.help = reject synonyms TYPE
3032
-pathSeparator.args = STRING
3133
-pathSeparator.help = separator between nodes in node path output (default: '/')
3234
-pattern.args = PATTERN

0 commit comments

Comments
 (0)