Ich möchte einen Code schreiben, der Strings in einer Hashmap speichert, wie sie aus Textdateien gelesen werden.Berechnen der Häufigkeit von Strings, wie sie in einer verschachtelten Hash-Mappe gespeichert werden
ich habe den Code unten geschrieben und es funktioniert, keine Fehler, die Häufigkeit von jedem Vorkommen der Zeichenfolge Kombination ändert sich nicht, es ist immer 1.
i für die Unterstützung bin zu fragen, wie ich sicherstellen kann, dass Wenn eine Zeichenkombination mehr als einmal in der Textdatei erscheint, sollte auch deren Häufigkeit zunehmen.
dies ist mein Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class NgramBetaC {
static String[] hashmapWord = null;
public static Map<String,Map<String, Integer>> bigrams = new HashMap<>();
public static void main(String[] args) {
//prompt user input
Scanner input = new Scanner(System.in);
//read words from collected corpus; a number of .txt files
File directory = new File("Corpus4");
File[] listOfFiles = directory.listFiles();//To read from all listed iles in the "directory"
//String bWord[] = null;
int lineNumber = 0;
String line;
String files;
String delimiters = "[\\s+,?!:;.]";
int wordTracker = 0;
//reading from a list of text files
for (File file : listOfFiles) {
if (file.isFile()) {
files = file.getName();
try {
if (files.endsWith(".txt") || files.endsWith(".TXT")) { //ensures a file being read is a text file
BufferedReader br = new BufferedReader(new FileReader(file));
while ((line = br.readLine()) != null) {
line = line.toLowerCase();
hashmapWord = line.split(delimiters);
for(int s = 0; s < hashmapWord.length - 2; s++){
String read = hashmapWord[s];
String read1 = hashmapWord[s + 1];
final String read2 = hashmapWord[s + 2];
String readBigrams = read + " " + read1;
final Integer count = null;
//bigrams.put(readBigrams, new HashMap() {{ put (read2, (count == null)? 1 : count + 1);}});
bigrams.put(readBigrams, new HashMap<String, Integer>());
bigrams.get(readBigrams).put(read2, (count == null) ? 1 : count+1);
} br.close();
}
}
} catch (NullPointerException | IOException e) {
e.printStackTrace();
System.out.println("Unable to read files: " + e);
}
}
}
}
die Linien im Text-Dateien enthalten sind ::
1.i ein Eis möchte. 2.i möchte in diesem dezember in dubai sein. 3.i liebe Pasta zu essen. 4.i liebe es, selbst Pasta zuzubereiten. 5. Wer kommt heute zu mir?
DER AUSGANG ich erhalte, wenn INHALT DES Hashmap Druck ist:
{kommt nach = {siehe = 1}, möchte = {to = 1}, in dubai = {this = 1}, Pasta zubereiten = {mich = 1}, zu essen = {pasta = 1}, wie zu = {be = 1}, zubereiten = {pasta = 1}, wird = {kommen = 1}, lieben zu = {vorbereiten = 1 }, etwas ice = {creme = 1}, sei in = {dubai = 1}, komme komm = {to = 1}, dubai this = {dezember = 1}, sei = {in = 1}, ich liebe = {to = 1}, um zu sehen = {me = 1}, wer wird = {be = 1}, wie einige = {ice = 1}, ich würde = {like = 1}, sehe mich = {today = 1} }
Bitte helfen Sie! Einige String-Kombinationen erscheinen nicht einmal.
DIE AUSGANGS ich erwarten würde, da ich aus den Dateien gelesen wird:
{to = kommenden {siehe = 1}, möchte = {to = 1}, in dubai = {this = 1 }, mach Pasta = {mich = 1}, iss = {pasta = 1}, mag = {be = 1}, um = {pasta = 1} vorzubereiten, wird = {coming = 1}, love to = {prepare = 1}, etwas ice = {creme = 1}, sei in = {dubai = 1}, komme komm = {to = 1}, dubai this = {dezember = 1}, zu = {in = 1} , ich liebe = {to = 1}, zu sehen = {me = 1}, wer wird = {be = 1}, wie etwas = {ice = 1}, ich würde = {like = 2}, seht mich = { Heute = 1}, Liebe zu {essen = 1}, möchte {etwas = 1}, würde ich {Liebe = 1}, würde lieben {zu = 1}}
ersetzen vielen Dank. das hat gut funktioniert. –
Jetzt möchte ich auf diese Frequenzen zugreifen können, um die Wahrscheinlichkeit zu berechnen. kannst du mir helfen, wie ich einen solchen Code schreiben kann. beispielsweise; Eines der Schlüsselpaare in der Hashmap lautet "möchte = {to = 1, some = 1}". davon möchte ich sagen können, wie oft die string "to" oder "einige" der string "möchte" folgen und so die wahrscheinlichkeit bestimmen. –