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