001 package calhoun.analysis.crf.io;
002
003 import java.io.BufferedReader;
004 import java.io.IOException;
005 import java.io.Writer;
006 import java.util.List;
007 import java.util.Map;
008
009 import calhoun.util.Assert;
010
011 /** reads in an input consisting of a string. Can be used as a standalone
012 * input component or part of an interleaved input.
013 */
014 public class StringInput extends InterleavedInputComponentBase {
015 private static final long serialVersionUID = -2944973705715162476L;
016
017 public boolean read(BufferedReader r, Map<String, InputSequence<?>> output) throws IOException {
018 String data = r.readLine();
019 if(data == null)
020 return false;
021 output.put(name, new InputSequenceCharacter(data));
022 return true;
023 }
024
025 public void write(Writer w, Map<String, ? extends InputSequence<?>> data) throws IOException {
026 InputSequenceCharacter comp = (InputSequenceCharacter) data.get(name);
027 Assert.a(comp != null, "No component found in input: "+name+". Entry is "+data.keySet().iterator().next());
028 w.write(comp.getString());
029 w.write('\n');
030 }
031
032 /** Convenience function for creating training sequences in test data. */
033 public static List<? extends TrainingSequence<Character>> prepareData(String str) {
034 try {
035 return (List<? extends TrainingSequence<Character>>) new InputHandlerInterleaved(new StringInput(), true).readTrainingData(str) ;
036 }
037 catch(Exception ex) {
038 throw new RuntimeException(ex);
039 }
040 }
041 }