gpt4 book ai didi

java - 显示 CSV 文件中的前 10 个单词

转载 作者:行者123 更新时间:2023-11-30 08:22:12 26 4
gpt4 key购买 nike

我有存储在 Google 云存储中的 CSV 文件。我正在阅读此 CSV 文件并为每次出现的单词构建一个树形图。有什么方法可以排序并仅显示文件中的前 10 个单词?

这是我的代码:

@SuppressWarnings("serial")
public class GoogleCloudStorageServlet extends HttpServlet {
public static final String BUCKETNAME = "bigdata";
public static final String FILENAME = "Railways.csv";

@SuppressWarnings({ "unchecked", "rawtypes" })

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world from java");
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(BUCKETNAME, FILENAME);
GcsFileOptions options = new GcsFileOptions.Builder()
.mimeType("text/html")
.acl("public-read")
.addUserMetadata("myfield1", "my field value")
.build();

GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);

PrintWriter writer = new PrintWriter(Channels.newWriter(writeChannel, "UTF8"));

GcsInputChannel readChannel = null;
BufferedReader reader = null;

String cvsSplitBy = ",";
try {
readChannel = gcsService.openReadChannel(filename, 0);
reader = new BufferedReader(Channels.newReader(readChannel, "UTF8"));
String line;
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
while ((line = reader.readLine()) != null) {

String[] post = line.split(cvsSplitBy);

String[] words = post[1].split("[ \n\t\r.,;:!?(){}]");

for (int counter = 0; counter < words.length; counter++) {
String key = words[counter].toLowerCase(); // remove .toLowerCase for Case Sensitive result.
if (key.length() > 0) {
if (map.get(key) == null) {
map.put(key, 1);
}
else {
int value = map.get(key).intValue();
value++;
map.put(key, value);
}
}
}

//Display only top 10 words in the file
}


} finally {
if (reader != null) { reader.close(); }
}
}
}

最佳答案

计算 CSV 文件中前 10 个单词的方法取决于文件的大小。

  1. 小文件(可以存入内存)

    如果是小文件,您可以使用某种针对您的情况优化的集合(例如 Bill Lin 提到的 Multiset)或自行计算。

    Map<String, Integer> counts = new HashMap<String, Integer>();
    for (String word : words) {
    Integer count = counts.get(word);
    if (count == null) {
    counts.put(word, 1);
    } else {
    counts.put(word, count + 1);
    }
    }

    如果文件非常小,这样的计算可以在单个请求的范围内处理。

  2. 中型/大型文件

    如果是中型或大型文件,您可能会超过请求限制(60 秒),也可能会耗尽可用内存。它也不会很有效。您需要一种不同的方法。

    试着看看MapReduce for App Engine .

    MapReduce is a programming model for processing large amounts of data in a parallel and distributed fashion. It is useful for large, long-running jobs that cannot be handled within the scope of a single request.

显示结果的方式取决于您的处理模式。

  1. 同步

    如果您的计算是同步的,您可以通过传递的响应对象直接从 Servlet 显示结果。

    HttpServletResponse#getWriter()
  2. 异步

    在异步计算的情况下,您需要将结果存储在某个地方(例如 Datastore)并按需显示它们

关于java - 显示 CSV 文件中的前 10 个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com