001 package org.maltparser.core.symbol.nullvalue;
002
003 import org.maltparser.core.symbol.SymbolTable;
004 /**
005
006
007 @author Johan Hall
008 @since 1.0
009 */
010 public class OutputNullValues extends NullValues {
011 private String rootLabel;
012
013 public OutputNullValues(String nullValueStrategy, SymbolTable table, String rootLabel) {
014 super(table);
015 setRootLabel(rootLabel);
016 setNullValueEncoding(nullValueStrategy);
017 makeNullValues();
018 }
019
020 private void setRootLabel(String rootLabel) {
021 if (rootLabel == null) {
022 this.rootLabel = "ROOT";
023 }
024 this.rootLabel = rootLabel;
025 }
026
027 public String getRootLabel() {
028 return rootLabel;
029 }
030
031 protected void setNullValueEncoding(String nullValueStrategy) {
032 setNullValueStrategy(nullValueStrategy);
033 if (nullValueStrategy.equalsIgnoreCase("none")) {
034 nullValueEncoding = NullValueDegree.NONE;
035 } else if (nullValueStrategy.equalsIgnoreCase("rootlabel")) {
036 nullValueEncoding = NullValueDegree.ROOTLABEL;
037 } else if (nullValueStrategy.equalsIgnoreCase("rootnode")) {
038 nullValueEncoding = NullValueDegree.ROOTNODE;
039 } else if (nullValueStrategy.equalsIgnoreCase("novalue")) {
040 nullValueEncoding = NullValueDegree.NOVALUE;
041 } else {
042 nullValueEncoding = NullValueDegree.ONE;
043 }
044 }
045
046 protected void makeNullValues() {
047 if (nullValueEncoding == NullValueDegree.NONE || nullValueEncoding == NullValueDegree.ONE) {
048 nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
049 nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#null#");
050 nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#null#");
051 nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
052 nullValue2CodeMap.put(NullValueId.ROOT_NODE, 0);
053 nullValue2CodeMap.put(NullValueId.NO_VALUE, 0);
054 symbol2CodeMap.put("#null#", 0);
055 code2SymbolMap.put(0, "#null#");
056 setNextCode(1);
057 } else if (nullValueEncoding == NullValueDegree.ROOTLABEL) {
058 nullValue2SymbolMap.put(NullValueId.NO_NODE, rootLabel);
059 nullValue2SymbolMap.put(NullValueId.ROOT_NODE, rootLabel);
060 nullValue2SymbolMap.put(NullValueId.NO_VALUE, rootLabel);
061 nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
062 nullValue2CodeMap.put(NullValueId.ROOT_NODE, 0);
063 nullValue2CodeMap.put(NullValueId.NO_VALUE, 0);
064 symbol2CodeMap.put(rootLabel, 0);
065 code2SymbolMap.put(0, rootLabel);
066 setNextCode(1);
067 } else if (nullValueEncoding == NullValueDegree.ROOTNODE) {
068 nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
069 nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
070 nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#rootnode#"); // maybe #null#
071 nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
072 nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
073 nullValue2CodeMap.put(NullValueId.NO_VALUE, 1); // maybe 0
074 symbol2CodeMap.put("#null#", 0);
075 symbol2CodeMap.put("#rootnode#", 1);
076 code2SymbolMap.put(0, "#null#");
077 code2SymbolMap.put(1, "#rootnode#");
078 setNextCode(2);
079 } else if (nullValueEncoding == NullValueDegree.NOVALUE) {
080 nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
081 nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
082 nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#novalue#");
083 nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
084 nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
085 nullValue2CodeMap.put(NullValueId.NO_VALUE, 2);
086 symbol2CodeMap.put("#null#", 0);
087 symbol2CodeMap.put("#rootnode#", 1);
088 symbol2CodeMap.put("#novalue#", 2);
089 code2SymbolMap.put(0, "#null#");
090 code2SymbolMap.put(1, "#rootnode#");
091 code2SymbolMap.put(1, "#novalue#");
092 setNextCode(3);
093 }
094 }
095
096 public String toString() {
097 StringBuilder sb = new StringBuilder();
098
099 return sb.toString();
100 }
101 }