gpt4 book ai didi

java - 使用斯坦福大学的词性标记器标记大文件

转载 作者:行者123 更新时间:2023-11-30 06:15:52 25 4
gpt4 key购买 nike

我目前正在使用 Java 和 IntelliJ IDE 来运行斯坦福大学的词性标注器。我已经使用本教程进行了设置:(http://new.galalaly.me/index.php/2011/05/tagging-text-with-stanford-pos-tagger-in-java-applications/)。它运行正常,但是,即使我给它提供的内容比这多得多,它也只输出大约两段文本(我的文件有 774 KB 的文本大小)。

在教程的底部,它指出了内存问题:

It turns out that the problem is that eclipse allocates on 256MB of memory by default. RightClick on the Project->Run as->Run Configurations->Go to the arguments tab-> under VM arguments type -Xmx2048m This will set the allocated memory to 2GB and all the tagger files should run now.

我已将 IntelliJ 配置为根据此答案使用 4GB 内存:How to increase IDE memory limit in IntelliJ IDEA on Mac?

然而,它并没有改变输出文本的数量。

还有什么可能导致这种情况发生?

(词性标注器原始站点链接: https://nlp.stanford.edu/software/tagger.shtml )

编辑:

我已将我的主类粘贴在下面。 TaggedWord 是一个帮助我解析和组织从标记器检索到的相关数据片段的类。

package com.company;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import edu.stanford.nlp.tagger.maxent.MaxentTagger;

public class Main {

public static void main(String[] args) {

File infile = new File("C:\\Users\\TEST\\Desktop\\input.txt");
File outfile = new File("C:\\Users\\TEST\\Desktop\\output.txt");
MaxentTagger tagger = new MaxentTagger("tagger/english-left3words-distsim.tagger");
FileWriter fw;
BufferedWriter bw;
List<TaggedWord> taggedWords;

try {
//read in entire text file to String
String fileContents = new Scanner(infile).useDelimiter("\\Z").next();

//erase contents of outfile from previous run
PrintWriter pw = new PrintWriter(outfile);
pw.close();

//tag file contents with parts of speech
String fileContentsTagged = tagger.tagString(fileContents);

taggedWords = processTaggedWords(fileContentsTagged);

fw = new FileWriter(outfile, true); //true = append
bw = new BufferedWriter(fw);

String uasiContent = "";
boolean firstWord = true;
for (TaggedWord tw : taggedWords) {
String englishWord = tw.getEng_word();
String uasiWord = translate(englishWord);
if (!tw.isPunctuation()) {
uasiContent += uasiWord + " ";
}
else {
//remove last space
uasiContent = uasiContent.substring(0, uasiContent.length() - 1);
uasiContent += uasiWord + " ";
}
}
bw.write(uasiContent);
bw.close();
}
catch (FileNotFoundException e1) {
System.out.println("File not found.");
}
catch (IOException e) {
System.out.print("Error writing to file.");
}
} //end main

编辑2:

我现在已经使用 while 循环将文件中读取的行修改为字符串,但它仍然给出相同的结果:

        //read in entire text file to String
String fileContents = "";
Scanner sc = new Scanner(infile).useDelimiter("\\Z");
while (sc.hasNext()) {
fileContents += sc.next();
}

最佳答案

您的扫描程序仅在读取输入文件开头时被调用一次。要继续,您需要声明 Scanner 独立,然后在 hasNext() 方法上使用 while 循环进行迭代。请参阅文档和example here关于通过扫描仪声明和迭代。

关于java - 使用斯坦福大学的词性标记器标记大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215977/

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