使用Java实现反向一致性

使用Java实现反向一致性,java,set,symbol-table,Java,Set,Symbol Table,今天,我正在与一个客户机合作,该客户机使用Java从文本文件创建一致性。我所需要做的就是颠倒一致性,从根本上从头到尾重新创建文本。现在,我似乎面临的问题是从哪里开始,以及如何完成每一步。到目前为止,我已经尝试创建一个单词数组,遍历我的符号表,并将每个键分配给该数组。最后,我从协和词中得到了一个单词列表。出于某种原因,这个问题让我觉得很愚蠢,因为它似乎应该是一个简单的解决方案。我似乎想不出任何有效的办法让我开始重新创作这个故事。我在这里包括了来源: public class InvertedCon

今天,我正在与一个客户机合作,该客户机使用Java从文本文件创建一致性。我所需要做的就是颠倒一致性,从根本上从头到尾重新创建文本。现在,我似乎面临的问题是从哪里开始,以及如何完成每一步。到目前为止,我已经尝试创建一个单词数组,遍历我的符号表,并将每个键分配给该数组。最后,我从协和词中得到了一个单词列表。出于某种原因,这个问题让我觉得很愚蠢,因为它似乎应该是一个简单的解决方案。我似乎想不出任何有效的办法让我开始重新创作这个故事。我在这里包括了来源:

public class InvertedConcordance {

public static ST<String, SET<Integer>> createConcordance (String[] words) {
    ST<String, SET<Integer>> st = new ST<String, SET<Integer>>();
    for (int i = 0; i < words.length; i++) {
        String s = words[i];
        if (!st.contains(s)) {
            st.put(s, new SET<Integer>());
        }
        SET<Integer> set = st.get(s);
        set.add(i);
    }
    return st;
}
public static String[] invertConcordance (ST<String, SET<Integer>> st) {

 //This is what I have so far
//Here is what I have that doesnt work
for(String key : st.keys())
{
inv[i++] = key;
}
for(int z = 0; z< inv.length; z++)
{
System.out.println(inv[z]);
}


 String[]inv = new String[st.size()];

    return inv;
}
private static void saveWords (String fileName, String[] words) {
    int MAX_LENGTH = 70;
    Out out = new Out (fileName);
    int length = 0;
    for (String word : words) {
        length += word.length ();
        if (length > MAX_LENGTH) {
            out.println ();
            length = word.length ();
        }
        out.print (word);
        out.print (" ");
        length++;
    }
    out.close ();
}
public static void main(String[] args) {
    String fileName = "data/tale.txt";
    In in = new In (fileName);
    String[] words = in.readAll().split("\\s+");

    ST<String, SET<Integer>> st = createConcordance (words);
    StdOut.println("Finished building concordance");

    // write to a file and read back in (to check that serialization works)
    //serialize ("data/concordance-tale.txt", st);
    //st = deserialize ("data/concordance-tale.txt");

    words = invertConcordance (st);
    saveWords ("data/reconstructed-tale.txt", words);
}
公共类反相器协调{
公共静态ST createConcordance(字符串[]个字){
ST=新ST();
for(int i=0;i最大长度){
out.println();
length=word.length();
}
打印输出(word);
打印输出(“”);
长度++;
}
out.close();
}
公共静态void main(字符串[]args){
字符串fileName=“data/tale.txt”;
In=新的In(文件名);
String[]words=in.readAll().split(\\s+);
ST=创建一致性(文字);
标准打印号(“完工建筑一致性”);
//写入文件并读回(以检查序列化是否有效)
//序列化(“data/concordance tale.txt”,st);
//st=反序列化(“data/concordance tale.txt”);
词语=反向一致性(st);
保存字(“data/reductured tale.txt”,字);
}

}

首先-为什么要使用一些奇怪的类,如:

  • 设置
而不是内置java类:

  • 设置
  • 地图
这里有哪些人

至于您的问题,您的代码根本不应该编译,因为您在使用变量
inv
后声明该变量:

public static String[] invertConcordance (ST<String, SET<Integer>> st) {

 //This is what I have so far
//Here is what I have that doesnt work
for(String key : st.keys())
{
inv[i++] = key;
}
for(int z = 0; z< inv.length; z++)
{
System.out.println(inv[z]);
}


 String[]inv = new String[st.size()];

    return inv;
}


首先-为什么要使用一些奇怪的类,如:

  • 设置
而不是内置java类:

  • 设置
  • 地图
这里有哪些人

至于您的问题,您的代码根本不应该编译,因为您在使用变量
inv
后声明该变量:

public static String[] invertConcordance (ST<String, SET<Integer>> st) {

 //This is what I have so far
//Here is what I have that doesnt work
for(String key : st.keys())
{
inv[i++] = key;
}
for(int z = 0; z< inv.length; z++)
{
System.out.println(inv[z]);
}


 String[]inv = new String[st.size()];

    return inv;
}


什么是“和谐”?我试着用谷歌搜索它,但没有发现任何相关内容。@MightyPork条目中的第一行似乎就是OP所说的内容。它基本上是一个单词索引,它给出了单词的上下文。无论它们出现在哪里。所以,如果我在寻找“the”,它会像“the”:第199页,第1页,第2页,第3页等等。有时他们会给出一个像“树枝上的叶子”这样的短段落。什么是“一致性”?我试着用谷歌搜索它,但没有发现任何相关内容。@MightyPork条目中的第一行似乎就是OP所说的内容。它基本上是一个单词索引,它给出了单词的上下文。无论它们出现在哪里。所以,如果我在找“the”,它会像“the”:第199页,第1页,第2页,第3页等等。有时他们会给出一个像“树枝上的叶子”这样的短段落
String[] document = new String[document_length+1];
String[] document = new String[document_length];
    document[i] = key;
    document[i-1] = key;