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 }