2

会話のテキスト ファイルをスキャンして、肯定的な単語と否定的な単語の数を見つける方法を考え出そうとしています。肯定語と否定語は、会話テキスト ファイルを「スキャン」するために使用される 2 つの別個のテキスト ファイルに含まれています。

肯定的な単語と否定的な単語の数を見つけた後、それぞれを集計して、さらに肯定的な単語または否定的な単語が見つかったかどうかを教えてくれます。

私はこれまでのところ以下のコードを持っていますが、肯定的な言葉だけを数えています。私はこの段階で NLP のようなものを見ているわけではなく、もっと基本的なレベルのものです。

間違った場所で否定的な言葉を探している 2 番目の部分があると思います。そして、ブール値を使用して、肯定的な単語または否定的な単語が見つかったかどうかを知る必要があると思いますが、その方法がわかりません。

私はJavaとプログラミング全般に慣れていないので、かなり行き詰まっています。

どんな助けでも大歓迎です。

package omgilisearch;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class SentimentTest {

    public static void main(String[] args) throws Exception {
          printAllCounts(
            readWordFile("ConversationTest.txt", loadKeywords("PositiveWords.txt")));
        }
    public static void main1(String[] args) throws Exception {
          printAllCounts(
            readWordFile("ConversationTest.txt", loadKeywords("NegativeWords.txt")));
        }

        private static Map<String, Integer> readWordFile(
          String fname, Set<String> keywords) throws FileNotFoundException
        {
          final Map<String, Integer> frequencyData = new TreeMap<String, Integer>();
          for (Scanner wordFile = new Scanner(new FileReader(fname)); 
            wordFile.hasNext();) 
          {
            final String word = wordFile.next();
            if (keywords.contains(word)) 
              frequencyData.put(word, getCount(word, frequencyData) + 1);
          }
          return frequencyData;
        }


        private static void printAllCounts(Map<String, Integer> frequencyData) {
          System.out.println("-----------------------------------------------");
          System.out.println(" Occurrences Word");
          for(Map.Entry<String, Integer> e : frequencyData.entrySet())
            System.out.printf("%15d %s\n", e.getValue(), e.getKey());
          System.out.println("-----------------------------------------------");
        }

        private static int getCount(String word, Map<String, Integer> frequencyData) {
            return frequencyData.containsKey(word)? frequencyData.get(word) : 0;
        }

        private static Set<String> loadKeywords(String fname) 
        throws FileNotFoundException 
        {
          final Set<String> result = new HashSet<String>();
          for (Scanner s = new Scanner(new FileReader(fname)); s.hasNext();) 
            result.add(s.next());
          return result;
        }
}
4

4 に答える 4

1

いわゆる「悪い」単語 (ハードコードされている) の配列をいくつか用意してから、テキスト ファイル全体を反復処理し、配列内のすべての単語を現在検査している単語と比較する必要があります。単語が配列内の単語の 1 つと一致する場合は、悪い単語の量を保持している変数を増やします。悪い言葉++;。このアプローチは機能するはずだと思います。

于 2012-05-19T08:12:47.813 に答える
0
package omgilisearch;

import java.io.*;

   public class SentimentTest {     

public static void main(String[] args) {

        String[] lines = new String[0];         
    String path = "ConversationTest.txt";         
    BufferedReader br = null;      
    try {

             File file = new File(path);

        br = new BufferedReader(                  
             new InputStreamReader(                  
             new FileInputStream(file)));             

    String line;             
    while( (line = br.readLine()) != null ) {                 

    lines = add(line, lines);

             }             

    br.close(); 

      } catch(IOException e) {             

    System.out.println("read error: " + e.getMessage());

         }         
    print(lines);     

    }       

    private static String[] add(String s, String[] array) { 

        String[] goodWordsHolder = new String[3];{

        }goodWordsHolder[0] = "good"; goodWordsHolder[1] = "great";goodWordsHolder[2] = "excellent";
        for(int iteration = 0; iteration < goodWordsHolder.length; iteration++) { String currentWordInText = null; if(goodWordsHolder[iteration] == currentWordInText) { }}
        return goodWordsHolder; } 

    private static void print(String[] data) {

       for(int i = 0; i < data.length; i++)             
    System.out.println(data[i]);     
} 

} 
于 2012-05-20T00:30:35.627 に答える
0

配列には、同じ情報タイプの複数のアイテムが格納されます。文字列[]悪い言葉;。会話テキストで見つけたい悪い単語が1つ以上あると確信しているので、これを使用する必要があると思います。そうでない場合は、単純に1つの文字列を使用します。文字列 badWord;.

動作させるためのすべてのコードを書き出すつもりはありません。アルゴリズムを示すだけです。

public class test {

// The process of picking out all the good and bad words
public static void main(String[] args) {
    // Setting up all the needed variables
        // Set up all the good words
        String[] goodWordsHolder = new String[2];
        goodWordsHolder[0] = "firstGoodWord";
        goodWordsHolder[1] = "secondGoodWord";
        // Set up all the bad words
        String[] badWordsHolder = new String[2];
        badWordsHolder[0] = "firstBadWord";
        badWordsHolder[1] = "secondBadWord";
        // Set up the counters
        int amountOfGoodWords = 0;
        int amountOfBadWords = 0;
        int currentWordInText = 0;
        // boolean that will exit the loop
        boolean ConversationEnded = false;

    while(!ConversationEnded) {
        // Compare the currentWord from the conversation with the hard coded words
        for(int iteration = 0; iteration < goodWordsHolder.length; iteration++) { 
            if(goodWordsHolder[iteration] == getWordInText(currentWordInText)) {
                amountOfGoodWords++;
            }   
        }
        for(int iteration = 0; iteration < badWordsHolder.length; iteration++) { 
            if(badWordsHolder[iteration] == getWordInText(currentWordInText)) {
                amountOfBadWords++;
            }   
        }
        // Increase the current word value so the next time we compare the next word in the conversation will be compared
        currentWordInText++;

        // Check that we haven't reached the end of the conversation
        if(endOfTheConversationHasBeenReached()) {
            // This will exit the while loop
            ConversationEnded = true;
        }
    }

    // Now print all the information to the console
    System.out.println("Amount of good Words: " + amountOfGoodWords);
    System.out.println("Amount of bad Words: " + amountOfBadWords);
    if(amountOfGoodWords > amountOfBadWords) {
        System.out.println("There are more good words than bad words.");
    }
    else {
        System.out.println("There are more bad words than good words.");
    }

}


// The method(s) you'll have to code out yourself. I suggest you read up on the web and so on to assist you with this.

private static String getWordInText(int currentWordInText) {
    // TODO Auto-generated method stub
    return null;
}

private static boolean endOfTheConversationHasBeenReached() {
    // TODO Auto-generated method stub
    return false;
}

}

論理エラーがあればすみません。コードはまだデバッグされていません。;) うまくいけば、これはあなたを正しい方向に導きます.

于 2012-05-20T09:09:58.670 に答える
0
package omgilisearch;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class SentimentTest {

    public static void main(String[] args) throws Exception {
          printAllCounts(
            readWordFile("ConversationTest.txt"));
        }

private static Map<String, Integer> readWordFile(String string) {

        return null;
    }

String[] goodWordsHolder = new String[3];{

goodWordsHolder[0] = "good"; goodWordsHolder[1] = "great";goodWordsHolder[2] = "excellent";

for(int iteration = 0; iteration < goodWordsHolder.length; iteration++) { String currentWordInText;
if(goodWordsHolder[iteration] == currentWordInText) { }// The word is a bad word } }

private static void printAllCounts(Map<String, Integer> frequencyData) {
          System.out.println("-----------------------------------------------");
          System.out.println(" Occurrences Word");
          for(Map.Entry<String, Integer> e : frequencyData.entrySet())
            System.out.printf("%15d %s\n", e.getValue(), e.getKey());
          System.out.println("-----------------------------------------------");
        }
}
于 2012-05-19T23:31:40.553 に答える