java初心者です。a.txtファイルを読み込みTFIDFを計算し画面にその単語とTFIDFを表示するプログラムを作りたいのですが、下のようなエラーが出てしまいます。どこが違うのかわかる方教えてください。
又、根本的に間違えていたらそこを指摘していただいて結構です。
よろしくお願いします。
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.io.*;
import java.io.BufferedReader;
import java.util.HashMap;
public class TFIDFCalculator{
public double tf(List<String> doc, String term) {
double result = 0;
for (String word : doc) {
if (term.equalsIgnoreCase(word))
result++;
}
return result / doc.size();
}
public double idf(List<List<String>> docs, String term) {
double n = 0;
for (List<String> doc : docs) {
for (String word : doc) {
if (term.equalsIgnoreCase(word)) {
n++;
break;
}
}
}
return Math.log(docs.size() / n);
}
public double tfIdf(List<String> doc, List<List<String>> docs, String term) {
return tf(doc, term) * idf(docs, term);
}
public static void main(String[] args)throws IOException{
File file = new File("a.txt");
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
HashMap<String,Integer> tm = new HashMap<String,Integer>();
String line;
while((line = br.readLine()) != null){
String[] str = line.split("[\'\"(){}<>, :;\\.]");
}
for(String t : str){ ←64
if(!tm.containsKey(t)){
tm.put(t,1);
}else{
tm.put(t,tm.get(t).intValue()+1);
}
TFIDFCalculator calculator = new TFIDFCalculator();
double tfidf = calculator.tfIdf(br,line, tm); ←73
for(String s : tm.keySet()){
System.out.println(s + tfidf);
}
}
}
}
TFIDFCalculator.java:64: シンボルを見つけられません
シンボル: 変数 str
場所: クラス TFIDFCalculator
for(String t : str){
^
TFIDFCalculator.java:73: null {5}のtfIdf(java.util.List<java.lang.String>,java.util.List<java.util.List<java.lang.String>>,java.lang.String) TFIDFCalculatorは指定された型に適用できません
期待値:
検出値: java.io.BufferedReader,java.lang.String,java.util.HashMap<java.lang.String,java.lang.Integer>
double tfidf = calculator.tfIdf(br,line, tm);
^
エラー2個
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こちらの環境ではコンパイルできたのですが
とりあえずListをArrayListにして実行できる形に再訂正して見ました
以下が訂正したプログラムです
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.io.*;
import java.io.BufferedReader;
import java.util.HashMap;
public class DP7{
public double tf(ArrayList<String> doc, String term) {
double result = 0;
for (String word : doc) {
if (term.equalsIgnoreCase(word))
result++;
}
return (double)result / doc.size();
}
public double idf(ArrayList<ArrayList<String>> docs, String term) {
double n = 0;
for (ArrayList<String> doc : docs) {
for (String word : doc) {
if (term.equalsIgnoreCase(word)) {
n++;
break;
}
}
}
return Math.log((double)(docs.size()/n));
}
public double tfIdf(ArrayList<String> doc, ArrayList<ArrayList<String>> docs, String term) {
return tf(doc, term) * idf(docs, term);
}
public static void main(String[] args)throws IOException{
String sear="単語";//探す単語
File file = new File("ファイル.txt");//ファイル名
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
String line;
String[] str=null;
ArrayList<ArrayList<String>> as2=new ArrayList<>();
while((line = br.readLine()) != null){
ArrayList<String> tt=new ArrayList<>();
str = line.split("[\'\"(){}<>, :;\\.]");
for(String t : str){
tt.add(t);
}
as2.add(tt);
}
for(ArrayList<String> sss:as2){
DP7 calculator = new DP7();
double tfidf = calculator.tfIdf(sss,as2,sear);
double tf = calculator.tf(sss,sear);
double idf = calculator.idf(as2,sear);
String h="";
for(String s : sss){
h+=s;
}
System.out.println(h +"tf:"+tf+" idf:"+idf+" tf-idf:"+ tfidf);
}
}
}
No.2
- 回答日時:
以下でできるのではないでしょうか
訂正して作ったので全体への指摘と言えないこともないように思います
上の顕著な間違いを挙げるなら、
HashMapはListではなくMapで、上記ではHashMapとして扱うべき
だが、そもそも今回はHashMapを使う必要がない
strを{}の中で宣言した場合、その外では使えない
です
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.io.*;
import java.io.BufferedReader;
import java.util.HashMap;
public class DP7{
public double tf(List<String> doc, String term) {
double result = 0;
for (String word : doc) {
if (term.equalsIgnoreCase(word))
result++;
}
return (double)result / doc.size();
}
public double idf(List<List<String>> docs, String term) {
double n = 0;
for (List<String> doc : docs) {
for (String word : doc) {
if (term.equalsIgnoreCase(word)) {
n++;
break;
}
}
}
return Math.log((double)(docs.size()/n));
}
public double tfIdf(List<String> doc, List<List<String>> docs, String term) {
return tf(doc, term) * idf(docs, term);
}
public static void main(String[] args)throws IOException{
String sear="探す単語";//探す単語
File file = new File("s.txt");//ファイル名
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
String line;
String[] str=null;
List<List<String>> as2=new ArrayList<>();
while((line = br.readLine()) != null){
List<String> tt=new ArrayList<>();
str = line.split("[\'\"(){}<>, :;\\.]");
for(String t : str){
tt.add(t);
}
as2.add(tt);
}
for(List<String> sss:as2){
DP7 calculator = new DP7();
double tfidf = calculator.tfIdf(sss,as2,sear);
double tf = calculator.tf(sss,sear);
double idf = calculator.idf(as2,sear);
String h="";
for(String s : sss){
h+=s;
}
System.out.println(h +"tf:"+tf+" idf:"+idf+" tf-idf:"+ tfidf);
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Java java final 1 2022/06/10 22:49
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
ActionForm form にnullが入っ...
-
ファイル名を動的に生成したい
-
干支の計算で。。。
-
シャットダウンフックが呼ばれない
-
import 文
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
Javaじゃんけんゲーム
-
かなり初歩的なプログラミング...
-
文字列を数式に
-
アプレットが初期化されていま...
-
透過GIFの判定の仕方ありますか?
-
アプレットを実行すると、×が表...
-
アルファベットのソート
-
HTMLでのTableタグデータ取得方法
-
応用情報技術者試験の令和元年...
-
1~100までの数字を表示し、か...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報
解答ありがとうございます。
解答していただいたプログラムを実行したのですが以下のエラーが出てきました。
ArrayListの横の<>はどのように訂正するべきでしょうか?
DP7.java:45: 型の開始が不正です
List<List<String>> as2=new ArrayList<>();
^
DP7.java:48: 型の開始が不正です
List<String> tt=new ArrayList<>();
^
エラー2個