Bu senaryoda, bir web uygulaması üzerinden kullanıcı yorumlarını toplayacağız. Apache Spark kullanarak bu yorumların duygu analizini yapacağız, yani yorumların pozitif, negatif ya da nötr olduğunu belirleyeceğiz. Sonuçlar, Java Spring Boot ile geliştirilmiş bir web arayüzünde gösterilecek.
Apache Spark ile Duygu Analizi:
Spark'ın MLlib kütüphanesini kullanarak basit bir duygu analizi modeli oluşturabiliriz. Bu model, önceden etiketlenmiş veri seti üzerinde eğitilebilir. Yorumları işleyerek duygu skorları elde ederiz.
Java Spring Boot ile Web Arayüzü:
Spring Boot, REST API'ları oluşturmak için kullanılabilir. Kullanıcılar yorumlarını gönderir ve bu yorumlar Spark'a iletilir. Spark'tan gelen duygu analizi sonuçları kullanıcıya web arayüzü üzerinden sunulur.
Örnek bir Spring Boot Controller metodu şöyle olabilir:
java
Copy code
@RestController
@RequestMapping("/api")
public class CommentController {
@Autowired
private SparkService sparkService; // Spark işlemlerini yürüten servis
@PostMapping("/analyze-comment")
public ResponseEntity<?> analyzeComment(@RequestBody String comment) {
String sentiment = sparkService.analyzeComment(comment);
return ResponseEntity.ok().body("Yorumun Duygu Durumu: " + sentiment);
}
}
Bu kod, kullanıcının gönderdiği yorumu alır ve Spark servisine iletir. Spark servisi, yorumu analiz eder ve duygu durumunu belirler.
Unutmayın ki bu sadece basit bir örnek. Gerçek bir uygulamada, duygu analizi için daha karmaşık modeller ve büyük veri işlemleri gerekebilir. Spark'ta duygu analizi yapmak için uygun bir veri seti ve model eğitimi de gereklidir.
Bu senaryoyu daha da detaylandırmak için, Apache Spark'ta duygu analizi işlemlerinin nasıl yapılabileceğini ve Java Spring Boot'ta bu işlemlerin nasıl entegre edilebileceğini aşama aşama ele alalım.
1. Apache Spark ile Duygu Analizi:
Apache Spark, büyük veri işlemleri için güçlü bir araçtır ve MLlib kütüphanesi makine öğrenimi işlemleri için geniş olanaklar sunar. Duygu analizi için, öncelikle eğitim veri setine ihtiyacınız olacak. Bu veri seti, metinler ve bunların ilişkili duygu etiketleri (pozitif, negatif, nötr) içermelidir.
Örnek bir duygu analizi veri seti genellikle metinler ve bu metinlere ilişkin duygu etiketlerini içerir. Bu etiketler genellikle "pozitif", "negatif" veya "nötr" gibi duygusal durumları temsil eder. Gerçek bir veri setinin yapısı ve içeriği değişkenlik gösterse de, temel bir örnek aşağıdaki gibi olabilir:
json
Copy code
[
{"text": "Bu ürünü çok beğendim, herkese tavsiye ederim!", "sentiment": "pozitif"},
{"text": "Maalesef beklentilerimi karşılamadı, memnun kalmadım.", "sentiment": "negatif"},
{"text": "Ürün idare eder, ne çok iyi ne de kötü.", "sentiment": "nötr"},
{"text": "Kargo çok hızlı geldi, teşekkürler.", "sentiment": "pozitif"},
{"text": "Ürün açıklamada belirtilen özelliklere sahip değil.", "sentiment": "negatif"},
{"text": "Fiyatına göre performansı iyi.", "sentiment": "nötr"}
]
Bu basit JSON formatındaki veri seti, her bir yorumun metnini ve ilgili duygu etiketini içerir. Gerçek dünya uygulamalarında, daha büyük ve karmaşık veri setleri kullanılır. Bu veri setlerini elde etmek için çeşitli kaynaklardan toplanan büyük miktarda verinin işlenmesi ve etiketlenmesi gerekir. Özellikle, duygu analizi modellerini eğitmek için yeterli miktarda ve çeşitlilikte veriye ihtiyaç vardır.
Apache Spark ile bu tür bir veri setini işlemek ve model eğitmek için, veri setinin Spark'ın anlayacağı formatta (genellikle bir DataFrame olarak) yüklenmesi ve uygun makine öğrenimi teknikleriyle işlenmesi gerekir.
Spark'ta Veri Setinin Hazırlanması ve Model Eğitimi:
java
Copy code
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.ml.classification.LogisticRegression;
import org.apache.spark.ml.classification.LogisticRegressionModel;
import org.apache.spark.ml.feature.Tokenizer;
import org.apache.spark.ml.feature.HashingTF;
import org.apache.spark.ml.feature.IDF;
import org.apache.spark.ml.Pipeline;
import org.apache.spark.ml.PipelineModel;
import org.apache.spark.ml.PipelineStage;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class SparkSentimentAnalysis {
public PipelineModel trainModel(String dataPath, SparkSession sparkSession) {
// Veri setini yükle
Dataset<Row> trainingData = sparkSession.read().json(dataPath);
// Metni tokenize et
Tokenizer tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words");
// Kelimeleri sayısal vektörlere dönüştür
HashingTF hashingTF = new HashingTF()
.setInputCol(tokenizer.getOutputCol())
.setOutputCol("features");
// Lojistik Regresyon Modeli
LogisticRegression lr = new LogisticRegression();
// Pipeline oluştur
Pipeline pipeline = new Pipeline().setStages(new PipelineStage[]{tokenizer, hashingTF, lr});
// Modeli eğit
return pipeline.fit(trainingData);
}
}
Bu kod parçası, eğitim veri setini yükler, metin verisini işler ve lojistik regresyon modeli kullanarak eğitim yapar. Gerçek bir uygulamada, modelin performansını artırmak için daha gelişmiş teknikler ve hiperparametre ayarlamaları yapılabilir.
2. Java Spring Boot ile Entegrasyon:
Spring Boot uygulamasında, yukarıda tanımlanan CommentController sınıfı kullanıcı yorumlarını alır ve Spark servisine iletir. Spark servisinde, Spark ile duygu analizi yapılır ve sonuçlar geri döndürülür.
Spark Servisi:
java
Copy code
import org.apache.spark.ml.PipelineModel;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.springframework.stereotype.Service;
@Service
public class SparkService {
private final PipelineModel model;
private final SparkSession sparkSession;
public SparkService() {
// SparkSession ve Modelin başlatılması
this.sparkSession = SparkSession.builder().appName("SentimentAnalysis").getOrCreate();
this.model = new SparkSentimentAnalysis().trainModel("path/to/data", sparkSession);
}
public String analyzeComment(String comment) {
// Yorumun Spark DataFrame'e dönüştürülmesi
Dataset<Row> commentData = sparkSession.createDataFrame(Collections.singletonList(comment), String.class);
// Duygu analizi
Dataset<Row> predictions = model.transform(commentData);
// Sonucun alınması ve döndürülmesi
Row prediction = predictions.collectAsList().get(0);
return prediction.getAs("prediction").toString();
}
}
Bu servis, Spark'ın duygu analizi modelini kullanarak gelen yorumları analiz eder ve duygu durumunu tahmin eder.
Sonuç:
Bu kodlar, bir Spring Boot uygulaması içinde Apache Spark ile duygu analizi yapmanın basit bir örneğidir