2014-03-31 5 views
0

저는 대학의 강사로부터 새로운 프로젝트에 대한 코드를 사용하고 있습니다. 데이터를 가져 오려는 작은 조각 하나만 제외하고 모든 것이 작동하는 것처럼 보입니다. .Frame "그리고 무엇이 빠졌는지 모르기 때문에 코드가 작동 할 것입니다. 누군가가 해결책을 안다면 나에게 필요한 "프레임"을 가져올 수있는 대안을 줄 수 있습니다.java : 가져 오기 데이터를 확인할 수 없습니다. 가져 오기 data.Frame

저는 이클립스를 사용하고 있습니다!

코드는 다음과 같습니다

import java.io.FileWriter; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Locale; 
import java.util.Map; 
import java.util.Set; 

import data.Frame; // HERE IS THE PROBLEM! 


/** 
* Compares the annotations of two or more annotators and groups them together, 
* before they are written to a csv file. 
*/ 
public class ComparisonWriter 
{ 
private String content; 

private final int A1 = 1; 
private final int A2 = 2; 
private final int A3 = 3; 
// private final int A4 = 4; 

private int numberOfAnnotators = 3; 

String outputFileName = "data/200Saetze/Gruppe 1/comparison_buchpreis2_alle.csv"; 

String inputA1 = "data/200Saetze/Gruppe 1/Daniela/buchpreis2.xml"; 
String inputA2 = "data/200Saetze/Gruppe 1/Inga/buchpreis2.xml"; 
String inputA3 = "data/200Saetze/Gruppe 1/Stefan/buchpreis2.xml"; 

public ComparisonWriter() 
{ 
    content = "SatzID;Annotator;Frame;SE;exact;partial;Source;Annotator;SourceString;" + 
      "exact;exact ohne leer;exact ohne leer (SE);partial;koreferent;SourceFlag;exact;Target;Annotator;" + 
      "TargetString;exact;exact ohne leer;exact ohne leer (SE);partial;koreferent;TargetFlag;;FrameFlag"; 

    AnnotationReader annotationReaderA1 = new AnnotationReader(inputA1); 
    Map<String, List<Frame>> seAnnotator1 = annotationReaderA1.getAllSubjectiveExpressions(); 
    AnnotationReader annotationReaderA2 = new AnnotationReader(inputA2); 
    Map<String, List<Frame>> seAnnotator2 = annotationReaderA2.getAllSubjectiveExpressions(); 
    AnnotationReader annotationReaderA3 = new AnnotationReader(inputA3); 
    Map<String, List<Frame>> seAnnotator3 = annotationReaderA3.getAllSubjectiveExpressions(); 

    Set<String> sentences = seAnnotator1.keySet(); 
    for (String sentence : sentences) 
    { 
     //add leading zeros 
     content += "\n\n" + sentence + ";" + annotationReaderA1.sentenceStrings.get(sentence); 

     //add the annotations in a sorted order 
     Map<Integer, List<Frame>> allFramesInSentence = new HashMap<Integer, List<Frame>>(); 
     allFramesInSentence.put(A1, seAnnotator1.get(sentence)); 
     allFramesInSentence.put(A2, seAnnotator2.get(sentence)); 
     allFramesInSentence.put(A3, seAnnotator3.get(sentence)); 
//   allFramesInSentence.put(A4, seAnnotator4.get(sentence)); 
//   
     //get the one with the most annotations 
     int largest = getIndexOfLargestList(allFramesInSentence); 

     if(largest == 0) 
      continue; 

     for (int i = 0; i < allFramesInSentence.get(largest).size(); i++) 
     { 
      Frame frame = allFramesInSentence.get(largest).get(i); 
      content += "\n\n;A" + largest + ";" + frame; 
      frame.setConsidered(true); 
      findOverlappingAnnotations(allFramesInSentence, largest, frame); 
     } 

     //Check, if there are not considered annotations in one of the frame lists for that sentence. 
     for (int a = 1; a <= 4; a++) 
     { 
      List<Frame> frameList = allFramesInSentence.get(a); 
      if(a != largest && frameList != null) 
      { 
       for (Frame frame : frameList) 
       { 
        if(frame.isConsidered() == false) 
        { 
         content += "\n\n;A" + a + ";" + frame; 
         frame.setConsidered(true); 
         findOverlappingAnnotations(allFramesInSentence, a, frame); 
        } 
       } 
      } 
     } 
    } 

    writeContentToFile(content, outputFileName, false); 
} 

/** 
* Find overlapping annotations. 
* @param frames - list of frames, potentially overlapping with the given one. 
* @param largest 
* @param frame - frame in question. 
*/ 
private void findOverlappingAnnotations(Map<Integer, List<Frame>> frames, 
     int largest, Frame frame) 
{ 
    for (int a = 1; a <= 4; a++) 
    { 
     //If j is not the current largest frame list and there are annotated frames 
     //in from this annotator (a) 
     if(a != largest && frames.get(a) != null) 
     { 
      for (Frame compareFrame : frames.get(a)) 
      { 
       addOverlappingAnnotations2Conent(frame, a, compareFrame); 
      } 
     } 
    } 
} 

/** 
* Add overlapping Annotations (measured by matching ids) to the content attribute. 
* @param frame 
* @param a - Annotator index 
* @param compareFrame 
*/ 
private void addOverlappingAnnotations2Conent(Frame frame, int a, 
     Frame compareFrame) 
{ 
    List<String> terminalIDs = compareFrame.getTerminalIDs(); 
    for (String id : terminalIDs) 
    { 
     if(compareFrame.isConsidered()) 
      break; 
     if(frame.getTerminalIDs().contains(id)) 
     { 
      //Write it to the content 
      content += "\n;A" + a + ";" + compareFrame; 
      compareFrame.setConsidered(true); 
      break; 
     } 
    } 
} 

/** 
* Get the index of the largest frame list in the map. 
* @param frames - a map with all the frames for each annotator (key: annotator) 
* @return The index of the largest frame list. 
*/ 
private int getIndexOfLargestList(Map<Integer, List<Frame>> frames) 
{ 
    int size = 0; 
    int largest = 0; 

    for(int a = 0; a <= numberOfAnnotators; a++) 
    { 
     if(frames.get(a) != null) 
     { 
      if(frames.get(a).size() > size) 
       largest = a; 
     } 
    } 

    return largest; 
} 

답변

0

당신은 프레임 클래스의 소스 코드 나 클래스 파일의 사본을 얻고 프로젝트에 추가해야합니다. 소스 코드는 Frame.java라는 파일에 있어야합니다.

+0

클래스 파일뿐 아니라 소스 코드가 필요한 이유에 대해 알려줄 수 있습니까? 그때까지 나의 부정적인 투표를 들고있는 im. –

+0

클래스 파일도 작동합니다. 나는 그것을 반영하기 위해 나의 대답을 편집했다. –

0

기본적으로 클래스 경로에 Frame 클래스가 필요합니다. 어떤 항아리에이 클래스가 있다면, 그 항아리를 클래스 패스에 추가하십시오.

관련 문제