Commit 723959f4 authored by Gamage B.G.N.U's avatar Gamage B.G.N.U

Merge branch 'IT17181570' into 'master'

Extract keywords from probability distribution essay type questions

See merge request !65
parents 9c04c894 fec5ab79
......@@ -38,7 +38,7 @@ android {
// python.exe file path *********** please change this according to your file path
python{
buildPython "C:/Users/Ruvi/AppData/Local/Programs/Python/Python39/python.exe"
buildPython "C:/Users/Cool/AppData/Local/Programs/Python/Python39/python.exe"
}
}
......
......@@ -151,6 +151,74 @@ public class DescriptiveStatisticsQuestionComparation {
}
/*public List<String> NumberValuesForKeywords(String question) {
int counting=0;
List<String> dataforkeyword = new ArrayList<>();
List<Pattern> patterns = new ArrayList<>();
//final String example = "1. 21 bricks have a mean mass of 24.2 kg, and 29 similar bricks have a mass of 23.6 kg. Determine the mean mass of the 50 bricks.";
String data = question;
final String regex1 = "mean.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex2 = "median.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex3 = "mode.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex4 = "minimum.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex5 = "maximum.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex6 = "minimum.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex7 = "range.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex8 = "first quartile.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex9 = "third quartile.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex10 = "range.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final String regex11 = "inter quartile range.*?\\d+(?:,\\d+)*(?:\\d+|(\\.\\d+)?)";
final Pattern pattern1 = Pattern.compile(regex1, Pattern.MULTILINE);
//final Matcher matcher = pattern1.matcher(string);
final Pattern pattern2 = Pattern.compile(regex2, Pattern.MULTILINE);
//final Matcher matcher2 = pattern2.matcher(string);
final Pattern pattern3 = Pattern.compile(regex3, Pattern.MULTILINE);
final Pattern pattern4 = Pattern.compile(regex4, Pattern.MULTILINE);
final Pattern pattern5 = Pattern.compile(regex5, Pattern.MULTILINE);
final Pattern pattern6 = Pattern.compile(regex6, Pattern.MULTILINE);
final Pattern pattern7 = Pattern.compile(regex7, Pattern.MULTILINE);
final Pattern pattern8 = Pattern.compile(regex8, Pattern.MULTILINE);
final Pattern pattern9 = Pattern.compile(regex9, Pattern.MULTILINE);
final Pattern pattern10 = Pattern.compile(regex10, Pattern.MULTILINE);
final Pattern pattern11 = Pattern.compile(regex11, Pattern.MULTILINE);
patterns.add(pattern1);
patterns.add(pattern2);
patterns.add(pattern3);
patterns.add(pattern4);
patterns.add(pattern5);
patterns.add(pattern6);
patterns.add(pattern7);
patterns.add(pattern8);
patterns.add(pattern9);
patterns.add(pattern10);
patterns.add(pattern11);
for (Pattern pattern : patterns) {
Matcher matcher = pattern.matcher(data);
//System.out.println("before matcher loop" + pattern.toString());
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
dataforkeyword.add(counting, matcher.group().trim());
counting++;
}
}
}
return dataforkeyword;
}*/
......
......@@ -7,7 +7,7 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class ExtractValueForRandomVariable {
public class ExtractValueForRandomVariable {
List<String> randomVariable = new ArrayList<String>();
List<String> wordlist = new ArrayList<String>();
String word;
......
package com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction;
import android.util.Log;
import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.elearning.probabilityandstatisticsanalyserandeducator.R;
import com.elearning.probabilityandstatisticsanalyserandeducator.inputMethod.DescriptiveSCinputMethod;
import com.elearning.probabilityandstatisticsanalyserandeducator.inputMethod.ProbabilityDistributionsIM;
import org.w3c.dom.ls.LSOutput;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProbabilityDistributionQuestionComparation {
Python py=null;
ProbabilityDistributionsIM probabilityDistributionsIM;
String a="Let X and Y be two independent random variables. Suppose that we know Var(2X−Y)=6 and Var(X+2Y)=9. Find Var(X) and Var(Y).";
public String ProbabilityDistributionComparewithCSV(String Probabilitydistributionquestions, List<String> reading) {
// System.out.println("reading des questions in dsqc "+reading);
String[] keywordlist = {"Probability","probability","Distribution","distribution","Random","random","Variable","variable","Normal","normal","Exponential","exponential","Element","element","Discrete","discrete","Function","function","P(X = x)̄","ΣP(x)=1","mass","Mass","cumulative","Cumulative","F(x)","P(X≤x)","mean","Mean","Expected","Value","expected","value","E(X)","Variance","variance","var(X)","V(X)","Standard","standard","Deviation","deviation","σ","μ"};
String b="A probability distribution of the number of overtime hours worked in one week per employee is listed below.\n" +
"Overtime hours,0,1,2,3,4,5,6\n" +
"Probability,0.016,0.075,0.134,0.31,0.23,0.155,0.08\n" +
"Find the standard deviation of the probability distribution. (Round to 1 decimal place as needed.)";
//System.out.println("String b:" + b);
List<String> questions ;
List<String> matchprodiskeyword = new ArrayList<>();
questions= reading;
String[] dataReader = new String[questions.size()];
questions.toArray(dataReader);
for (int i=0; i<dataReader.length; i++){
}
String questionlist = "";
for (String s : questions){
questionlist += s + "\t";
}
py = Python.getInstance();
PyObject pyo = py.getModule("probabilitydistribution");
PyObject pyo1 = py.getModule("probabilitydistribution_keywords");
PyObject obj = pyo.callAttr("main",a,dataReader);
PyObject obj1 = pyo1.callAttr("matchkeyword",keywordlist,Probabilitydistributionquestions);
String result=obj.toString();
String result1=obj1.toString();
System.out.println("output matching: "+result);
System.out.println("matching: "+result1);
matchprodiskeyword = QuestionMatch(result);
return result;
}
private List<String> readProbDistributionQuestions(InputStream in){
String[] printQuestion = new String[500];
List<ProbabiltyDistributionCSVfile> probDistributionQuestions= new ArrayList<>();
List<String> StringprobdistributionQuestions= new ArrayList<>();
//InputStream is = getResources().openRawResource(R.raw.propabilitydistribution);
BufferedReader reader = new BufferedReader(
new InputStreamReader(in, Charset.forName("UTF-8"))
);
String line = "";
try {
while ((line = reader.readLine()) != null) {
//Split by '"'
String tokens = line;
//Read the csv
ProbabiltyDistributionCSVfile question = new ProbabiltyDistributionCSVfile();
question.setQuestion(tokens);
probDistributionQuestions.add(question);
StringprobdistributionQuestions.add(tokens);
//printQuestion[lines] = line;
// Log.d("MyActivity", "Just created: " + question);
}
} catch (IOException e) {
//Log.wtf("MyActivity", "Error reading data file on line " + line, e);
e.printStackTrace();
}
finally {
try {
reader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
return StringprobdistributionQuestions;
}
String data;
public List<String> QuestionMatch(String highest) {
int counter = 0;
List<String> wordlist = new ArrayList<String>();
List<String> matchword = new ArrayList<String>();
List<String> valueAccordingtoLine = new ArrayList<>();
String word;
return valueAccordingtoLine;
}
public List<String> ExtractDatasetFromDistributionQuestion(String question) {
List<String> extractnumbervalues = new ArrayList<String>();
Pattern pattern1 = Pattern.compile("(?<=\\s)\\d++(?!\\.\\b)");
Matcher matcher1 = pattern1.matcher(question);
boolean value1 = matcher1.matches();
while (matcher1.find()) {
System.out.println("'" + matcher1.group().trim() + "'");
extractnumbervalues.add(matcher1.group().trim());
}
//System.out.println("matched data set of extract " + extractnumbervalues);
return extractnumbervalues;
}
}
......@@ -7,7 +7,7 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class ProbabilityValue {
public class ProbabilityValue {
List<String> probabilityvalue = new ArrayList<String>();
List<String> wordlist = new ArrayList<String>();
String word;
......
package com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction;
public class ProbabiltyDistributionCSVfile {
private String question;
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
}
......@@ -54,6 +54,7 @@ import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
......@@ -316,8 +317,10 @@ public class DescriptiveSCinputMethod extends AppCompatActivity {
DescriptiveStatisticsQuestionComparation dsqc = new DescriptiveStatisticsQuestionComparation();
List<String> reading = readDesQuestions();
List<String> extractDatasetForEssay;
List<String> extractNumbervalue;
String[] extractDatasetForEssayArray = new String[0];
String extractedKeywordsFromFuzzy = null;
if (selectedType.equals("Solve Essay problem")) {
......@@ -327,8 +330,13 @@ public class DescriptiveSCinputMethod extends AppCompatActivity {
//--------------------extrct dataset from DescripticeStatsQuesCompare class using ExtractDatasetfromDescriptiveQuestion method -----------------------------
extractDatasetForEssay = dsqc.ExtractDatasetFromDescriptiveQuestion(output);
System.out.println("extractDatasetForEssay " + extractDatasetForEssay);
//System.out.println("extractNumbervalue " + extractNumbervalue);
// System.out.println("words by words " + str.toString());
//System.out.println("Common elements == "+common);
// Converting list to array after data extraction function
extractDatasetForEssayArray = new String[extractDatasetForEssay.size()];
extractDatasetForEssayArray = extractDatasetForEssay.toArray(extractDatasetForEssayArray);
......
......@@ -40,6 +40,10 @@ import com.elearning.probabilityandstatisticsanalyserandeducator.calculationfunc
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.DescriptiveStatisticsCSVfile;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.DescriptiveStatisticsQuestionComparation;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.ExtractData;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.ExtractValueForRandomVariable;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.ProbabilityDistributionQuestionComparation;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.ProbabilityValue;
import com.elearning.probabilityandstatisticsanalyserandeducator.dataExtraction.ProbabiltyDistributionCSVfile;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.googlecode.tesseract.android.TessBaseAPI;
import com.theartofdev.edmodo.cropper.CropImage;
......@@ -71,7 +75,8 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
Python py = null;
List<String> extractedData;
List<String> extractedData1;
List<String> extractedData2;
Integer[] valuesTakenFromEditTextArray;
// ImageView imageView, img_greyview;
......@@ -83,7 +88,9 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
//ExtractData class Instance
ExtractData extractData;
//ExtractData extractData;
ExtractValueForRandomVariable extractValueForRandomVariable;
ProbabilityValue probabilityValue;
Uri uri;
......@@ -128,12 +135,14 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
setImageProperties = new SetImageProperties();
// Arraylist to pass the data
extractedData = new ArrayList<>();
extractedData1 = new ArrayList<>();
extractedData2 = new ArrayList<>();
valuesTakenFromEditTextArray = new Integer[]{};
// initializing the object of ExtractData class
extractData = new ExtractData();
extractValueForRandomVariable = new ExtractValueForRandomVariable();
probabilityValue = new ProbabilityValue();
//intitalzing the OCR object
ocr = new OCR();
......@@ -324,36 +333,50 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
// -------------**** getting the final input from edit text
String output = textInput.getText().toString().trim();
String output1 = textInput_2.getText().toString().trim();
if (extractedData.size() == 0) {
extractedData.add(output); // adding data to List
if (extractedData1.size() == 0) {
extractedData1.add(output); // adding data to List
}
System.out.println("ExctractedData list size " + extractedData.size());
System.out.println("ExctractedData list size " + extractedData1.size());
// adding List to array in order to pass to ExtractData function
String[] dataArray = new String[extractedData.size()];
dataArray = extractedData.toArray(dataArray);
String[] dataArray1 = new String[extractedData1.size()];
dataArray1 = extractedData1.toArray(dataArray1);
if (extractedData2.size() == 0) {
extractedData2.add(output1); // adding data to List
}
System.out.println("ExctractedData1 list size " + extractedData2.size());
// adding List to array in order to pass to ExtractData function
String[] dataArray2 = new String[extractedData2.size()];
dataArray2 = extractedData2.toArray(dataArray2);
// --------------------------------- Use ProbabilityDistributionQuestionComparation class methods for solve essay type question --------------------------
//list to receive the extrated data
List<String> extractedDataset;
List<String> extractedDataset1;
DescriptiveStatisticsQuestionComparation dsqc = new DescriptiveStatisticsQuestionComparation();
List<String> reading = readDesQuestions();
ProbabilityDistributionQuestionComparation pdqc = new ProbabilityDistributionQuestionComparation();
List<String> reading = readProbDistributionQuestions();
List<String> extractDatasetForEssay;
String[] extractDatasetForEssayArray = new String[0];
String extractedKeywordsFromFuzzy = null;
if (selectedType.equals("Solve Essay problem")) {
extractedKeywordsFromFuzzy = dsqc.DescriptiveStatisticsQuestionComparewithCSV(output, reading);
extractedKeywordsFromFuzzy = pdqc.ProbabilityDistributionComparewithCSV(output, reading);
System.out.println("extractedKeywordsFromFuzzy " + extractedKeywordsFromFuzzy);
//--------------------extrct dataset from DescripticeStatsQuesCompare class using ExtractDatasetfromDescriptiveQuestion method -----------------------------
extractDatasetForEssay = dsqc.ExtractDatasetFromDescriptiveQuestion(output);
extractDatasetForEssay = pdqc.ExtractDatasetFromDistributionQuestion(output);
System.out.println("extractDatasetForEssay " + extractDatasetForEssay);
// Converting list to array after data extraction function
......@@ -363,7 +386,8 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
}
//calling the extract data function for normal question solvings
extractedDataset = extractData.ExtractionWithComma(dataArray);
extractedDataset = extractValueForRandomVariable.InputRandomVariable(dataArray1);
extractedDataset1 = probabilityValue.ExtractionProbabilityValue(dataArray2);
//-------------------------------------------------------------------------------------------------------------------------------- remove lateer
......@@ -373,6 +397,9 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
String[] datasetArray = new String[extractedDataset.size()];
datasetArray = extractedDataset.toArray(datasetArray);
String[] datasetArray1 = new String[extractedDataset1.size()];
datasetArray1 = extractedDataset1.toArray(datasetArray1);
// System.out.println("selected Type "+selectedRadioButton.getText().toString());
......@@ -387,7 +414,9 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
}
extractedDataset.clear();
extractedDataset1.clear();
datasetArray = null;
datasetArray1 = null;
startActivity(intent);
}
......@@ -638,4 +667,48 @@ public class ProbabilityDistributionsIM extends AppCompatActivity {
return StringdescriptiveQuestions;
}
//----------------------readProbDistributionQuestion method from ProbabilityDistributionQuestionComparation class-----------------------------------------------------------------------
private List<String> readProbDistributionQuestions(){
String[] printQuestion = new String[500];
List<ProbabiltyDistributionCSVfile> probDistributionQuestions= new ArrayList<>();
List<String> StringprobdistributionQuestions= new ArrayList<>();
InputStream is = getResources().openRawResource(R.raw.propabilitydistribution);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8"))
);
String line = "";
try {
while ((line = reader.readLine()) != null) {
//Split by '"'
String tokens = line;
//Read the csv
ProbabiltyDistributionCSVfile question = new ProbabiltyDistributionCSVfile();
question.setQuestion(tokens);
probDistributionQuestions.add(question);
StringprobdistributionQuestions.add(tokens);
//printQuestion[lines] = line;
//Log.d("MyActivity", "Just created: " + question);
}
} catch (IOException e) {
//Log.wtf("MyActivity", "Error reading data file on line " + line, e);
e.printStackTrace();
}
finally {
try {
reader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
return StringprobdistributionQuestions;
}
}
\ No newline at end of file
from fuzzywuzzy import process
def main(data,data2):
str2match=data
stroptions=["A probability distribution of the number of overtime hours worked in one week per employee is listed below.
Overtime hours,0,1,2,3,4,5,6
Probability,0.016,0.075,0.134,0.31,0.23,0.155,0.08
Find the standard deviation of the probability distribution. (Round to 1 decimal place as needed.)"]
stroptions=["A probability distribution of the number of overtime hours worked in one week per employee is listed below. Overtime hours,0,1,2,3,4,5,6 Probability,0.016,0.075,0.134,0.31,0.23,0.155,0.08 Find the standard deviation of the probability distribution. (Round to 1 decimal place as needed.)"]
ratio=process.extract(str2match,data2)
highest=process.extractOne(str2match,data2)
#print(ratio)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment