以下のコードは、Java でトークン化するためのものです。修正できない小さなバグがあります。これはファイルのトークン化に関するものです。このコードでは、ユーザーがファイルに 4 つの大文字の単語を入力したとします。トークン化することは想定されておらず、同じ行に保持されることが想定されています。大文字などがない場合は、残りの単語をトークン化する必要があります。
例えば
こんにちは、ウォルトです。
O/P は次のようになります。
アメリカ合衆国
やあ
私
午前
ウォルト。
これが本来の姿です。コードを書いた後、小さなバグに直面しています。O/P はこのように表示されます。
アメリカ合衆国
州
の
アメリカ
やあ
私
午前
ウォルト。
基本的に、「States Of America」を取り除く必要があります。大文字をチェックしているコードの一部。この問題を回避することができないので、この問題を解決するのを手伝ってもらえますか? これを可能にするものは何でも役に立ちます。
コードを自由に変更して、出力を取得してみてください。
import java.io.*;
import java.util.*;
public class Tokenize {
public static void main (String[] args) {
try {
BufferedReader inputReader=new BufferedReader(new FileReader("C:/Users/Advait/Desktop/nlp_wikipedia.txt"));
String currentLine;
while ((currentLine = inputReader.readLine())!=null) {
// START STUDENT CODE
char atUpper;
char atUpper1;
int keeper = 1;
int keeper1 = 0;
String temp = "";
int j;
int i;
int counter = 0;
int m=0;
int n=0;
String temp1 = "";
boolean boolKeeper,boolKeeper1;
String Delimeter = "[\\s,:;'!?()\"]+";
for(j=0;j<(currentLine.length()-1);j++) {
if(currentLine.contains("://")) {
currentLine=currentLine.replace("://","#");
}
}
String token1[] = currentLine.split(Delimeter);
for(j=0;j<(token1.length)-1;j++) {
if(j>0) {
if(keeper==0) {
atUpper = token1[j+1].charAt(0);
atUpper1 = token1[keeper].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
m++;
temp1 = token1[keeper].concat(" ").concat(token1[j+1]);
token1[keeper] = temp1;
}
} else {
i=j+1;
atUpper = token1[j].charAt(0);
atUpper1 = token1[i].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
counter=counter+1;
if(counter == 1) {
keeper1 = j;
}
n++;
temp = token1[keeper1].concat(" ").concat(token1[i]);
token1[keeper1] = temp;
}
}
} else {
i=j+1;
atUpper = token1[j].charAt(0);
atUpper1 = token1[i].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
keeper = 0;
m++;
temp = token1[j].concat(" ").concat(token1[i]);
token1[j] = temp;
}
}
ArrayList<String> LineList = new ArrayList<String>();
for (String token : token1) {
if (!token.equals("%")) {
LineList.add(token);
}
}
token1 = LineList.toArray(new String[LineList.size()]);
String token2 = token1[j];
for (int l=0;l<(token2.length()-1);l++) {
if(token2.charAt(l) == '-' && token2.charAt(l+1) == '\n') {
String token3[] = token2.split("-");
token1[j] = token3[0] + token3[1];
}
}
}
for(int k=0;k<(token1.length);k++) {
if(token1[k].contains(".") && token1[k].contains("@")) {
token1[k] = token1[k].replace(".", "*");
}
if(token1[k].contains("#") && token1[k].contains(".")) {
token1[k] = token1[k].replace("#","://");
token1[k] = token1[k].replace(".","*");
}
}
for(int k=0;k<(token1.length);k++) {
StringTokenizer st = new StringTokenizer(token1[k],".");
while (st.hasMoreTokens()) {
token1[k] = st.nextToken();
}
}
for(int k=0;k<(token1.length);k++) {
String token4 = token1[k];
for (int l=0;l<(token4.length()-1);l++) {
if(token4.contains("@") && token4.contains("*")) {
token1[k] = token4.replace("*",".");
}
if(token1[k].contains("://") && token1[k].contains("*")) {
token1[k] = token4.replace("*",".");
}
}
}
for(int k=0;k<(token1.length);k++) {
System.out.println(token1[k]);
}
// END STUDENT CODE
}
}
catch (IOException e) {
System.err.println("Caught IOException: "+e.getMessage());
}
}
}