Commit b1abe99d authored by Miyuru Wijesinghe's avatar Miyuru Wijesinghe

updated

parent 4d79851e
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
<option name="TEMPLATE_FOLDERS">
<list>
<option value="$MODULE_DIR$/../FlaskSpellChecker\templates" />
</list>
</option>
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6.3 (C:\Users\tharu\AppData\Local\Programs\Python\Python36-32\python.exe)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/FlaskSpellChecker.iml" filepath="$PROJECT_DIR$/.idea/FlaskSpellChecker.iml" />
</modules>
</component>
</project>
\ No newline at end of file
This diff is collapsed.
from datetime import datetime
from SinhalaGrammarRules import sinhala
from nltk import grammar, parse
import json
import string
import numpy as np
import requests
from requests.structures import CaseInsensitiveDict
def checkGrammar(sentence):
try:
singram = grammar.FeatureGrammar.fromstring(sinhala)
parser = parse.FeatureEarleyChartParser(singram)
strLine = sentence
url = "https://easysinhalaunicode.com/Api/convert"
headers = CaseInsensitiveDict()
headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8"
headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
data = "data="+strLine
print('strLine is : '+strLine)
print('data is : '+data)
res = requests.post(url, headers=headers, data=data)
print('singlish API response : '+res.text)
sinhalaText = res.text
print('Sinhala is : '+sinhalaText)
tokens = sinhalaText.split()
trees = parser.parse(tokens)
chkStrgFirst = "Test"
chkStrgFinal = "Test"
print('tokens & length : '+str(tokens))
print(len(tokens))
if len(tokens) > 1:
i = 0
for tree in trees:
for node in tree:
for nodenode in node:
print(str(node))
if i == 0:
chkStrgFirst = str(nodenode)
print(str(nodenode) + '\n')
i = i + 1
chkStrgFinal = str(nodenode)
print(chkStrgFirst)
print(chkStrgFinal)
chkStrgFirstArry = chkStrgFirst.split("[")
chkStrgFirst = chkStrgFirstArry[1]
chkStrgFirstArry = chkStrgFirst.split("]")
chkStrgFirst = chkStrgFirstArry[0]
print(chkStrgFirst)
chkStrgFinalArry = chkStrgFinal.split("[")
chkStrgFinal = chkStrgFinalArry[1]
chkStrgFinalArry = chkStrgFinal.split("]")
chkStrgFinal = chkStrgFinalArry[0]
print(chkStrgFinal)
jstre = json.dumps(tree)
jsting = json.loads(jstre)
newstr = str(jsting)
newstr02 = newstr.replace("[", "")
newstr03 = newstr02.replace("]", "")
print(newstr03)
tense = "test"
singular_plural = "test"
gramr = "Correct grammar"
if "TENSE='Npast'" in chkStrgFinal:
tense = "present"
if "TENSE='past'" in chkStrgFinal:
tense = "past"
if "NUM='pl'" in chkStrgFirst and "NUM='pl'" in chkStrgFinal:
singular_plural = "plural"
if "NUM='sg'" in chkStrgFirst and "NUM='sg'" in chkStrgFinal:
singular_plural = "singular"
if tense == "test" or singular_plural == "test":
gramr = "Wrong grammar"
jObj = {}
jObj["inputText"] = strLine
jObj["sinhalaText"] = sinhalaText
jObj["isCorrectGrammar"] = gramr
jObj["tense"] = tense
jObj["numberOfGrammar"] = singular_plural
except Exception as e:
print (e)
tense = "Wrong tense"
singular_plural = "Wrong grammar number"
gramr = "Wrong grammar"
jObj = {}
jObj["inputText"] = strLine
jObj["sinhalaText"] = sinhalaText
jObj["isCorrectGrammar"] = gramr
jObj["tense"] = tense
jObj["numberOfGrammar"] = singular_plural
print(jObj)
return jObj
from datetime import datetime
from flask import Flask
from flask import Response
from SinhalaGrammarRules import sinhala
from nltk import grammar, parse
from flask import request
import json
import string
import numpy as np
import requests
from requests.structures import CaseInsensitiveDict
import urllib.request
app = Flask(__name__)
@app.route('/check-grammar', methods=['GET', 'POST'])
def upload():
try:
singram = grammar.FeatureGrammar.fromstring(sinhala)
parser = parse.FeatureEarleyChartParser(singram)
strLine = request.json['inputText']
#****************************
url = "https://easysinhalaunicode.com/Api/convert"
#headers = CaseInsensitiveDict()
#headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8"
#headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
content_type = 'application/x-www-form-urlencoded; charset=UTF-8'
headers = {'User-Agent': user_agent, 'Content-Type': content_type}
#data = strLine
print('strLine is : '+strLine)
#print('data is : '+data)
print(url)
print(headers)
values = {'data': strLine }
print(values)
data = urllib.parse.urlencode(values)
print(data)
data = data.encode('utf-8')
print(data)
res = urllib.request.urlopen(url, data, headers)
print('***********')
#resdata = res.read()
print(res)
#res = requests.post(url, headers=headers, data=data)
#jsonData = res.json()
#for data in jsonData:
# print(data)
print(res.text)
sinhalaText = res.text
print('Singlish : '+sinhalaText)
#**************************
tokens = strLine.split()
trees = parser.parse(tokens)
chkStrgFirst = "Test"
chkStrgFinal = "Test"
sentenceSize = []
print('tokens : '+str(tokens))
print(len(tokens))
if len(tokens) == 2:
print('in 2nd node')
i = 0
for tree in trees:
for node in tree:
for nodenode in node:
print(str(node))
if i == 0:
chkStrgFirst = str(nodenode)
print(str(nodenode) + '\n')
i = i + 1
chkStrgFinal = str(nodenode)
if len(tokens) == 3:
print('in 3rd node')
i = 0
for tree in trees:
for node in tree:
for nodenode in node:
if i == 0:
chkStrgFirst = str(nodenode)
print(str(nodenode) + '\n')
i = i + 1
chkStrgFinal = str(nodenode)
if len(tokens) == 4:
print('in 4th node')
i = 0
for tree in trees:
for node in tree:
for nodenode in node:
if i == 0:
chkStrgFirst = str(nodenode)
print(str(nodenode) + '\n')
i = i + 1
chkStrgFinal = str(nodenode)
print(chkStrgFirst)
print(chkStrgFinal)
chkStrgFirstArry = chkStrgFirst.split("[")
chkStrgFirst = chkStrgFirstArry[1]
chkStrgFirstArry = chkStrgFirst.split("]")
chkStrgFirst = chkStrgFirstArry[0]
print(chkStrgFirst)
print("***************")
chkStrgFinalArry = chkStrgFinal.split("[")
chkStrgFinal = chkStrgFinalArry[1]
chkStrgFinalArry = chkStrgFinal.split("]")
chkStrgFinal = chkStrgFinalArry[0]
print(chkStrgFinal)
jstre = json.dumps(tree)
jsting = json.loads(jstre)
newstr = str(jsting)
newstr02 = newstr.replace("[", "")
newstr03 = newstr02.replace("]", "")
print(newstr03)
tense = "test"
singular_plural = "test"
gramr = "correct grammar"
if "TENSE='Npast'" in chkStrgFinal:
tense = "present"
if "TENSE='past'" in chkStrgFinal:
tense = "past"
if "NUM='pl'" in chkStrgFirst and "NUM='pl'" in chkStrgFinal:
singular_plural = "plural"
if "NUM='sg'" in chkStrgFirst and "NUM='sg'" in chkStrgFinal:
singular_plural = "singular"
if tense == "test" or singular_plural == "test":
gramr = "Wrong grammar"
#print(sentenceSize)
jObj = {}
jObj["inputText"] = strLine
jObj["isCorrectGrammar"] = gramr
jObj["tense"] = tense
jObj["numberOfGrammar"] = singular_plural
except Exception as e:
print (e)
tense = "Wrong tense."
singular_plural = "Wrong grammar number."
gramr = "Wrong grammar."
jObj = {}
jObj["inputText"] = strLine
jObj["isCorrectGrammar"] = gramr
jObj["tense"] = tense
jObj["numberOfGrammar"] = singular_plural
return Response(json.dumps(jObj), mimetype='application/json')
@app.route('/test', methods=['GET', 'POST'])
def res_massage():
return "Hello User!"
if __name__ == '__main__':
app.run(port=5000, debug=True)
## Libraries
* nltk
* flask
* request
## Helpers
* SinhalaGrammarRules.py
## Execute
* ASpeakGrammar.py
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
function singlishConvert(){
var str = $("#InputText").val();
if(str.length>0){
dataSend = {"inputText" : $("#InputText").val()}
console.log(dataSend)
$.ajax({
type: "POST",
url: "/check-grammar",
data: JSON.stringify(dataSend, null, '\t'),
contentType: 'application/json;charset=UTF-8',
success: function (data) {
console.log(data)
if(data.isCorrectGrammar === "Wrong grammar"){
$("#resultGrammar").text("ව්‍යාකරණ වැරදියි");
}
if(data.isCorrectGrammar === "Correct grammar") {
$("#resultGrammar").text("ව්‍යාකරණ නිවැරදියි");
}
if(data.tense === "test"){
$("#resultTense").text("කාලය වැරදියි");
}
if(data.tense === "present"){
$("#resultTense").text("වර්තමාන කාල");
}
if(data.tense === "past"){
$("#resultTense").text("අතීත කාල");
}
if(data.numberOfGrammar === "test"){
$("#numberVal").text("සංඛ්‍යාව වැරදියි");
}
if(data.numberOfGrammar === "plural"){
$("#numberVal").text("බහු වචන");
}
if(data.numberOfGrammar === "singular"){
$("#numberVal").text("ඒක වචන");
}
$("#sinhalaString").text(data.sinhalaText);
},
complete: function (xhr, textStatus) {
console.log("AJAX Request complete -> ", xhr, " -> ", textStatus);
},
error: function () {
$("#sinhalaString").text("හරිද ?");
$("#resultGrammar").text("හරිද ?");
$("#resultTense").text("හරිද ?");
$("#numberVal").text("හරිද ?");
$("#myModal").modal();
console.log("Error occur");
}
});
}else{
$("#sinhalaString").text("හරිද ?");
$("#resultGrammar").text("හරිද ?");
$("#resultTense").text("හරිද ?");
$("#numberVal").text("හරිද ?");
$("#myModal02").modal();
}
};
This diff is collapsed.
function rectime(secs) {
var hr = Math.floor(secs / 3600);
var min = Math.floor((secs - (hr * 3600))/60);
var sec = Math.floor(secs - (hr * 3600) - (min * 60));
if (hr < 10) {hr = '0' + hr; }
if (min < 10) {min = '0' + min;}
if (sec < 10) {sec = '0' + sec;}
if (hr) {hr = '00';}
return hr + ':' + min + ':' + sec;
}
(function($) {
$.fn.myPlayer = function() {
return this.each(function() {
// variables
var $oMain = $(this);
var $oVideo = $('video', $oMain);
var $oPlay = $('.play', $oMain);
var $oPause = $('.pause', $oMain);
var $oTimeSlider = $('.time_slider', $oMain);
var $oTimer = $('.timer', $oMain);
var $oVolSlider = $('.volume_slider', $oMain);
var $oMute = $('.mute', $oMain);
var $oUnmute = $('.unmute', $oMain);
var bTimeSlide = false;
var iVolume = 1;
// functions section
var prepareTimeSlider = function() {
if (! $oVideo[0].readyState) {
setTimeout(prepareTimeSlider, 1000);
} else {
$oTimeSlider.slider({
value: 0,
step: 0.01,
orientation: 'horizontal',
range: 'min',
max: $oVideo[0].duration,
animate: true,
slide: function() {
bTimeSlide = true;
},
stop:function(e, ui) {
bTimeSlide = false;
$oVideo[0].currentTime = ui.value;
}
});
};
};
// events section
$oPlay.click(function () {
$oVideo[0].play();
$oPlay.hide();
$oPause.css('display', 'block');
});
$oPause.click(function () {
$oVideo[0].pause();
$oPause.hide();
$oPlay.css('display', 'block');
});
$oMute.click(function () {
$oVideo[0].muted = true;
$oVolSlider.slider('value', '0');
$oMute.hide();
$oUnmute.css('display', 'block');
});
$oUnmute.click(function () {
$oVideo[0].muted = false;
$oVolSlider.slider('value', iVolume);
$oUnmute.hide();
$oMute.css('display', 'block');
});
// bind extra inner events
$oVideo.bind('ended', function() {
$oVideo[0].pause();
$oPause.hide();
$oPlay.css('display', 'block');
});
$oVideo.bind('timeupdate', function() {
var iNow = $oVideo[0].currentTime;
$oTimer.text(rectime(iNow));
if (! bTimeSlide)
$oTimeSlider.slider('value', iNow);
});
// rest initialization
$oVolSlider.slider({
value: 1,
orientation: 'vertical',
range: 'min',
max: 1,
step: 0.02,
animate: true,
slide: function(e, ui) {
$oVideo[0].muted = false;
iVolume = ui.value;
$oVideo[0].volume = ui.value;
}
});
prepareTimeSlider();
$oVideo.removeAttr('controls');
});
};
})(jQuery);
\ No newline at end of file
<!DOCTYPE HTML>
<html>
<head>
<title>ASpeak</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="Grammar Checker" />
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false);
function hideURLbar(){ window.scrollTo(0,1); } </script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="static/Css/style.css" type="text/css" media="all" />
<link href="//fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i&amp;subset=cyrillic,cyrillic-ext,greek,greek-ext,latin-ext,vietnamese" rel="stylesheet">
</head>
<body>
<h1 class="agile-head"> ASpeak Grammar</h1>
<div class="wrap">
<div class="total-content">
<div class="top-grids-222">
<div class="w3l-main">
<h3>let us check grammar</h3>
<form id="Upload_Form" method="POST" enctype="multipart/form-data">
<input id="InputText" type="text" class="name" name="text" placeholder="Insert here" required="">
<input id="UploadInput" onclick="singlishConvert()" type="button" name="my-form" value="Check Now">
</form>
</div>
</div>
<div class="top-grids">
<div class="profile-agile">
<h2>Results</h2><br>
<div class="w3layouts">
<img src="static/images/sinhala_a.png" width="80" alt=" " />
<h3>Sinhala</h3><br>
<h2 id="sinhalaString">Sinhala Text</h2>
</div>
<div class="agileits-w3layouts">
<div class="w3l">
<h4>කාලය</h4>
</div>
<div class="w3l">
<h4 id="resultTense">හරිද ?</h4>
</div>
<div class="clear"></div>
</div><br>
<div class="agileits-w3layouts">
<div class="w3l">
<h4>සංඛ්‍යාව</h4>
</div>
<div class="w3l">
<h4 id="numberVal">හරිද ?</h4>
</div>
<div class="clear"></div>
</div><br>
<div class="agileits-w3layouts">
<div class="w3l">
<h4>ව්‍යාකරණ</h4>
</div>
<div class="w3l">
<h4 id="resultGrammar">හරිද ?</h4>
</div>
<div class="clear"></div>
</div><br>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Error occured</h4>
</div>
<div class="modal-body">
<p>Connection Issue</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="myModal02" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Error occured</h4>
</div>
<div class="modal-body">
<p>Please enter a sentence</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="static/Scripts/jquery-2.1.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="static/Scripts/all.js" type="text/javascript"></script>
<script src="static/Scripts/index.js" type="text/javascript"></script>
</body>
</html>
\ No newline at end of file
from ASpeakGrammar import checkGrammar
checkGrammar("ballaa giyaa")
#checkGrammar("mama adha giyaa")
#checkGrammar("mama heta yanawaa")
\ No newline at end of file
from flask import Flask
from flask import Response, render_template
from flask import request
import json
from ASpeakGrammar import checkGrammar
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return render_template(
'index.html',
title='Home Page'
)
@app.route('/check-grammar', methods=['GET', 'POST'])
def upload():
try:
strLine = request.json['inputText']
jObj = checkGrammar(strLine)
except Exception as e:
print (e)
return Response(json.dumps(jObj), mimetype='application/json')
@app.route('/test', methods=['GET', 'POST'])
def res_massage():
return "Hello User!"
if __name__ == '__main__':
app.run(port=5000, debug=True)
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "ASpeakGrammarGitHub.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-1YxpeHrUyOI",
"outputId": "c06b395f-4b81-46d4-a631-8032bb1ca768"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'ASpeakGrammar'...\n",
"remote: Enumerating objects: 29, done.\u001b[K\n",
"remote: Counting objects: 100% (29/29), done.\u001b[K\n",
"remote: Compressing objects: 100% (22/22), done.\u001b[K\n",
"remote: Total 29 (delta 8), reused 28 (delta 7), pack-reused 0\u001b[K\n",
"Unpacking objects: 100% (29/29), done.\n"
]
}
],
"source": [
"!git clone https://github.com/MiyuruWijesinghe/ASpeakGrammar.git"
]
},
{
"cell_type": "code",
"source": [
"%cd ASpeakGrammar/ASpeakGrammar/"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MrxjMgrZU6ZW",
"outputId": "3f4e19c4-7c32-47de-8998-445e6d6ce11b"
},
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"/content/ASpeakGrammar/ASpeakGrammar/ASpeakGrammar/ASpeakGrammar\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!python test.py"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wqevuOKWV6Cs",
"outputId": "6d7f2009-23e1-4c10-8fd2-0a9b59513af2"
},
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"strLine is : ballaa giyaa\n",
"data is : data=ballaa giyaa\n",
"singlish API response : බල්ලා ගියා \n",
"Sinhala is : බල්ලා ගියා \n",
"tokens & length : ['බල්ලා', 'ගියා']\n",
"2\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා)\n",
"\n",
"(VP[GEN=?G, NUM='sg', PER='F', TENSE='past']\n",
" (IV[NUM='sg', PER='F', TENSE='past', +VLT] ගියා))\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(VP[GEN=?G, NUM='sg', PER='F', TENSE='past']\n",
" (TV[NUM='sg', PER='F', TENSE='past', +VLT] ගියා))\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(VP[GEN=?G, NUM='sg', PER='T', TENSE='past']\n",
" (IV[NUM='sg', PER='T', TENSE='past', -VLT] ගියා))\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(VP[GEN='MA', NUM='sg', PER='T', TENSE='past']\n",
" (IV[GEN='MA', NUM='sg', PER='T', TENSE='past', +VLT] ගියා))\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(VP[GEN='MA', NUM='sg', PER='T', TENSE='past']\n",
" (TV[GEN='MA', NUM='sg', PER='T', TENSE='past', -VLT] ගියා))\n",
"(NP[CASE='F2', DEF=?TF, GEN='MA', NUM='sg']\n",
" (N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා))\n",
"(VP[GEN='MA', NUM='sg', PER='T', TENSE='past']\n",
" (TV[GEN='MA', NUM='sg', PER='T', TENSE='past', +VLT] ගියා))\n",
"(N[CASE='F2', DEF='TRue', GEN='MA', NUM='sg'] බල්ලා)\n",
"(TV[GEN='MA', NUM='sg', PER='T', TENSE='past', +VLT] ගියා)\n",
"CASE='F2', DEF='TRue', GEN='MA', NUM='sg'\n",
"GEN='MA', NUM='sg', PER='T', TENSE='past', +VLT\n",
"'බල්ලා', 'ගියා'\n",
"{'inputText': 'ballaa giyaa', 'sinhalaText': 'බල්ලා ගියා ', 'isCorrectGrammar': 'correct grammar', 'tense': 'past', 'numberOfGrammar': 'singular'}\n"
]
}
]
},
{
"cell_type": "code",
"source": [
""
],
"metadata": {
"id": "j6HckyC5WCad"
},
"execution_count": null,
"outputs": []
}
]
}
\ No newline at end of file
File added
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