@page "/doctor/ai"
@attribute [Authorize(Roles = UserRoles.Doctor)]
@layout DoctorLayout
@inject IDoctorManagementService DoctorManagementService
AI Sickness Prediction
@if (!string.IsNullOrEmpty(statusMessage))
{
@statusMessage
}
@if (predictions != null && predictions.Count > 0)
{
Predictions:
@foreach (var prediction in predictions)
{
- @prediction.Disease - Probability: @prediction.Probability%
}
}
@code {
private string statusMessage = string.Empty;
private bool isSuccess;
private List predictions;
private async Task HandleFileSelected(InputFileChangeEventArgs e)
{
try
{
var file = e.File;
await using var stream = file.OpenReadStream();
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var fileContent = memoryStream.ToArray();
var text = await ExtractTextFromPdf(fileContent);
Console.WriteLine(text);
if (!string.IsNullOrEmpty(text))
{
var result = await DoctorManagementService.GetSicknessPrediction(text);
if (result != null)
{
predictions = result.Data;
statusMessage = result.Message;
isSuccess = true;
}
else
{
statusMessage = "Failed to get predictions from the AI service.";
isSuccess = false;
}
}
else
{
statusMessage = "Failed to extract text from PDF.";
isSuccess = false;
}
}
catch (Exception ex)
{
statusMessage = $"Error: {ex.Message}";
isSuccess = false;
}
}
private async Task ExtractTextFromPdf(byte[] pdfBytes)
{
using var reader = new MemoryStream(pdfBytes);
using var pdfReader = new PdfReader(reader);
using var pdfDoc = new PdfDocument(pdfReader);
var text = new StringBuilder();
for (var i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
{
var strategy = new SimpleTextExtractionStrategy();
var pageText = PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(i), strategy);
text.AppendLine(pageText);
}
return text.ToString();
}
}