├── HateSpeechDetection_Multichannel_CNN_LSTM ├── Hatespeech_detection.ipynb ├── Hatespeech_detection_MConv_LSTM.ipynb └── temp │ └── Bengali_ Hate_Speech_Dataset_Revised.csv ├── LICENSE ├── MakeWordVectors ├── LICENSE ├── README.md ├── build_corpus.py ├── evaluate.py ├── fasttext.sh ├── lcodes.txt ├── make_wordvectors.py └── make_wordvectors.sh ├── Movie_storyline_with_LSTM.ipynb ├── Multichannel_CNN_LSTM.png ├── README.md ├── SentimentAnalysis_Multichannel_CNN_LSTM ├── Multichannel_CNN_Bengali_Sentiment..py ├── Multichannel_CNN_Bengali_Sentiment.ipynb ├── stopwords_bn.txt └── tmp │ ├── test │ ├── bangla.neg │ └── bangla.pos │ └── train │ ├── bangla.neg │ └── bangla.pos ├── bengali_slung_abusive.txt └── stopwords-bn.txt /HateSpeechDetection_Multichannel_CNN_LSTM/Hatespeech_detection.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import os\n", 10 | "\n", 11 | "os.environ[\"CUDA_DEVICE_ORDER\"]=\"PCI_BUS_ID\";\n", 12 | " \n", 13 | "# The GPU id to use, usually either \"0\" or \"1\";\n", 14 | "os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0\"; " 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stderr", 24 | "output_type": "stream", 25 | "text": [ 26 | "Using TensorFlow backend.\n" 27 | ] 28 | } 29 | ], 30 | "source": [ 31 | "#importing libraries \n", 32 | "import sklearn\n", 33 | "import numpy as np\n", 34 | "from glob import glob\n", 35 | "from sklearn import datasets\n", 36 | "from sklearn.model_selection import train_test_split\n", 37 | "from sklearn.feature_extraction.text import CountVectorizer\n", 38 | "from sklearn.feature_extraction.text import TfidfTransformer\n", 39 | "from sklearn.linear_model import SGDClassifier\n", 40 | "from sklearn.ensemble import RandomForestClassifier\n", 41 | "from sklearn import metrics\n", 42 | "from sklearn.pipeline import Pipeline \n", 43 | "\n", 44 | "import string\n", 45 | "from os import listdir\n", 46 | "from nltk.corpus import stopwords\n", 47 | "from nltk.corpus import stopwords\n", 48 | "from pickle import dump\n", 49 | "from string import punctuation\n", 50 | "\n", 51 | "from numpy import array\n", 52 | "from keras.preprocessing.text import Tokenizer\n", 53 | "from keras.preprocessing.sequence import pad_sequences\n", 54 | "from keras.utils.vis_utils import plot_model\n", 55 | "from keras.models import Model\n", 56 | "from keras.layers import Input\n", 57 | "from keras.layers import Dense\n", 58 | "from keras.layers import Flatten\n", 59 | "from keras.layers import Dropout\n", 60 | "from keras.layers import Embedding\n", 61 | "from keras.layers.convolutional import Conv1D\n", 62 | "from keras.layers import LSTM\n", 63 | "from keras.layers.convolutional import MaxPooling1D\n", 64 | "from keras.layers.merge import concatenate\n", 65 | "from pickle import load\n", 66 | "\n", 67 | "import gensim\n", 68 | "from gensim.models import Word2Vec\n", 69 | "from gensim.utils import simple_preprocess\n", 70 | "\n", 71 | "import csv, string" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 3, 77 | "metadata": {}, 78 | "outputs": [ 79 | { 80 | "name": "stdout", 81 | "output_type": "stream", 82 | "text": [ 83 | "{'Gender abusive hate': 0, 'Geopoitical Hate': 1, 'Religious Hate': 2, 'Political Normal': 3, 'Political Hate': 4, 'Personal Hate': 5}\n" 84 | ] 85 | } 86 | ], 87 | "source": [ 88 | "categories = ['Gender abusive hate', 'Geopoitical Hate','Religious Hate','Political Normal','Political Hate','Personal Hate']\n", 89 | "num_of_labels=len(categories)\n", 90 | "categories_dict={key:value for value,key in enumerate(categories)}\n", 91 | "categories_inverse_dict={key:value for key,value in enumerate(categories)}\n", 92 | "print(categories_dict)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": {}, 99 | "outputs": [], 100 | "source": [] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 4, 105 | "metadata": {}, 106 | "outputs": [ 107 | { 108 | "name": "stdout", 109 | "output_type": "stream", 110 | "text": [ 111 | "['অতএব', 'অথচ']\n", 112 | "\n" 113 | ] 114 | } 115 | ], 116 | "source": [ 117 | "stop_words='../stopwords-bn.txt'\n", 118 | "text_data=[]\n", 119 | "with open(stop_words,'r',encoding='utf-8') as temp_output_file:\n", 120 | " reader=csv.reader(temp_output_file, delimiter='\\n')\n", 121 | " for row in reader:\n", 122 | " text_data.append(row)\n", 123 | "stop_word_list=[x[0] for x in text_data]\n", 124 | "print(stop_word_list[0:2])\n", 125 | "print(type(stop_word_list))" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 5, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [ 134 | "def save_dataset(dataset, filename):\n", 135 | " dump(dataset, open(filename,'wb'))\n", 136 | " print('Saved :%s' % filename)\n", 137 | "\n", 138 | "def load_doc(filename):\n", 139 | " file=open(filename,'r',encoding='utf-8')\n", 140 | " text=file.read()\n", 141 | " file.close()\n", 142 | " return text\n", 143 | "\n", 144 | "\n", 145 | "def clean_doc(doc, stop_word_list):\n", 146 | " # split into tokens by white space\n", 147 | " sentences=list()\n", 148 | " \n", 149 | " for sentence in doc:\n", 150 | " # remove punctuation from each token\n", 151 | " \n", 152 | " table = str.maketrans('', '', string.punctuation)\n", 153 | " tokens = [w.translate(table) for w in sentence.split(' ')] # I belive word in sentence\n", 154 | " sentences.append(' '.join(tokens))\n", 155 | " return sentences\n", 156 | "\n" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 6, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "def load_data_and_labels(filename,stop_word_list):\n", 166 | " doc=load_doc(filename)\n", 167 | " x_doc=list()\n", 168 | " label=list()\n", 169 | " for line in doc.split('\\n'):\n", 170 | " x_and_label=line.split('\\t')\n", 171 | " #print(x_and_label)\n", 172 | " x_doc.append(x_and_label[1])\n", 173 | " label.append(categories_dict[x_and_label[0]])\n", 174 | " \n", 175 | " #print(x_doc)\n", 176 | " #print(label)\n", 177 | " trainX=clean_doc(x_doc, stopwords)\n", 178 | " return trainX, label\n", 179 | " " 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 15, 185 | "metadata": {}, 186 | "outputs": [], 187 | "source": [ 188 | "trainX,trainY=load_data_and_labels('temp/Bengali_Hate_Speech_Dataset_Revised.csv',stop_word_list)" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 16, 194 | "metadata": {}, 195 | "outputs": [ 196 | { 197 | "name": "stdout", 198 | "output_type": "stream", 199 | "text": [ 200 | "['এদের কারনে এলিয়েনরা পৃথিবীতে বেড়াতে আসে না।', 'এই গান গুলা হুইন্না আমি এখন আমি পাবনা তে আসি', 'ভাই ছোট আজাদ চুদনাপানা না করলেই কি না ', 'সব মাদার চোদ। সালারা তোদের কাছ থেকে কি শিখব ', 'বাইরে থাক আর গুঁতাগুঁতি কর ', 'ইংলিশ এ Wiz khalifa Weed টানে আর বাঙালিরারা টানলেই দোষ ধইরা ফেল্লা', 'আসোলে তুমি নিজেই বলসিলা বাংগালি না আমরা। জাতটাই ত খারাপ', 'আর আমাদের এই খাইস্টা জাতের মধ্যে তুমিও পড় সো রক্ত ত মিশশা আসেই জিনিস টা', 'শালা তুই সালমান রিদিয়া আসিফসব পাকনাপাকনা পুলাপাইন ', 'এসব আবাল গুলা আমাদের সুন্দর বিনোদন থেকে দূরে রাখে। ']\n" 201 | ] 202 | } 203 | ], 204 | "source": [ 205 | "print(trainX[0:10])" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 17, 211 | "metadata": {}, 212 | "outputs": [], 213 | "source": [ 214 | "def create_tokenizer(lines):\n", 215 | " tokenizer=Tokenizer()\n", 216 | " tokenizer.fit_on_texts(lines)\n", 217 | " return tokenizer\n", 218 | "\n", 219 | "def encode_text(tokenizer, lines, length):\n", 220 | " #print(lines)\n", 221 | " encoded=tokenizer.texts_to_sequences(lines)\n", 222 | " print(encoded[0:10])\n", 223 | " padded= pad_sequences(encoded, maxlen=length, padding='post')\n", 224 | " return padded" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 18, 230 | "metadata": {}, 231 | "outputs": [], 232 | "source": [ 233 | "tokenizer=create_tokenizer(trainX)" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 19, 239 | "metadata": {}, 240 | "outputs": [ 241 | { 242 | "name": "stdout", 243 | "output_type": "stream", 244 | "text": [ 245 | "Max document length: 300\n", 246 | "Vocabulary size: 5034\n", 247 | "\n", 248 | "[[194, 339, 1537, 636, 1538, 637, 70], [2, 340, 195, 1539, 33, 52, 33, 1540, 341, 908], [21, 221, 253, 1541, 1, 1542, 6, 1], [12, 111, 1543, 487, 34, 1544, 28, 6, 1545], [408, 909, 5, 1546, 179], [254, 66, 1547, 1548, 1549, 1550, 5, 1551, 1552, 910, 911, 1553], [1554, 222, 912, 1555, 1556, 1, 1557, 1558, 255, 112], [5, 23, 2, 1559, 1560, 151, 1561, 1562, 488, 489, 255, 1563, 1564, 1565, 53], [39, 7, 913, 1566, 1567, 1568, 914], [180, 162, 195, 23, 256, 1569, 28, 1570, 1571]]\n", 249 | "(1400, 300)\n" 250 | ] 251 | } 252 | ], 253 | "source": [ 254 | "trainLength=300\n", 255 | "vocab_size=len(tokenizer.word_index)+1\n", 256 | "print('Max document length: %d' % trainLength)\n", 257 | "print('Vocabulary size: %d' % vocab_size)\n", 258 | "print()\n", 259 | "trainX = encode_text(tokenizer, trainX, trainLength)\n", 260 | "print(trainX.shape)\n", 261 | "#trainX[2]" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 20, 267 | "metadata": {}, 268 | "outputs": [ 269 | { 270 | "name": "stderr", 271 | "output_type": "stream", 272 | "text": [ 273 | "/home/bharaj/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:12: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).\n", 274 | " if sys.path[0] == '':\n" 275 | ] 276 | } 277 | ], 278 | "source": [ 279 | "NUM_WORDS=20000\n", 280 | "word_vectors = Word2Vec.load('../posts.bin')\n", 281 | "EMBEDDING_DIM=300\n", 282 | "vocabulary_size=len(tokenizer.word_index)+1\n", 283 | "word_index=tokenizer.word_index\n", 284 | "embedding_matrix = np.zeros((vocabulary_size, EMBEDDING_DIM))\n", 285 | "\n", 286 | "for word, i in word_index.items():\n", 287 | " if i>=NUM_WORDS:\n", 288 | " continue\n", 289 | " try:\n", 290 | " embedding_vector=word_vectors[word]\n", 291 | " embedding_matrix[i]=embedding_vector\n", 292 | " except KeyError:\n", 293 | " embedding_matrix[i]=np.random.normal(0,np.sqrt(0.25),EMBEDDING_DIM)\n", 294 | "\n", 295 | "del(word_vectors)" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": 21, 301 | "metadata": {}, 302 | "outputs": [], 303 | "source": [ 304 | "embedding_layer=Embedding(vocabulary_size, EMBEDDING_DIM, weights=[embedding_matrix],trainable=True)" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": null, 310 | "metadata": {}, 311 | "outputs": [], 312 | "source": [] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 35, 317 | "metadata": {}, 318 | "outputs": [], 319 | "source": [ 320 | "# define the model\n", 321 | "def define_model(length, vocab_size):\n", 322 | "\t# channel 1\n", 323 | "\tinput1 = Input(shape=(length,))\n", 324 | "\tembedding_layer_1 = embedding_layer(input1)\n", 325 | "\tconv1 = Conv1D(filters=32, kernel_size=4, activation='relu')(embedding_layer_1)\n", 326 | "\tdrop1 = Dropout(0.5)(conv1)\n", 327 | "\tpool1 = MaxPooling1D(pool_size=2)(drop1)\n", 328 | "\tflat1 = Flatten()(pool1)\n", 329 | " \n", 330 | "\t# channel 2\n", 331 | "\tinput2 = Input(shape=(length,))\n", 332 | "\tembedding_layer_2 = embedding_layer(input2)\n", 333 | "\tconv2 = Conv1D(filters=32, kernel_size=6, activation='relu')(embedding_layer_2)\n", 334 | "\tdrop2 = Dropout(0.5)(conv2)\n", 335 | "\tpool2 = MaxPooling1D(pool_size=2)(drop2)\n", 336 | "\tflat2 = Flatten()(pool2)\n", 337 | " \n", 338 | "\t# channel 3\n", 339 | "\tinput3 = Input(shape=(length,))\n", 340 | "\tembedding_layer_3 = embedding_layer(input3)\n", 341 | "\tconv3 = Conv1D(filters=32, kernel_size=8, activation='relu')(embedding_layer_3)\n", 342 | "\tdrop3 = Dropout(0.5)(conv3)\n", 343 | "\tpool3 = MaxPooling1D(pool_size=2)(drop3)\n", 344 | "\tflat3 = Flatten()(pool3)\n", 345 | " \n", 346 | "\t# merge\n", 347 | "\tCNN_layer = concatenate([flat1, flat2, flat3])\n", 348 | " \n", 349 | "\t# LSTM\n", 350 | "\tx = embedding_layer(input3)\n", 351 | "\tLSTM_layer = LSTM(128)(x)\n", 352 | "\n", 353 | "\tCNN_LSTM_layer = concatenate([LSTM_layer, CNN_layer])\n", 354 | " \n", 355 | "\t# interpretation\n", 356 | "\tdense1 = Dense(10, activation='relu')(CNN_LSTM_layer)\n", 357 | "\toutputs = Dense(num_of_labels, activation='softmax')(dense1)\n", 358 | "\tmodel = Model(inputs=[input1, input2, input3], outputs=outputs)\n", 359 | " \n", 360 | "\t# compile\n", 361 | "\tmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 362 | " \n", 363 | "\t# summarize\n", 364 | "\tprint(model.summary())\n", 365 | " \n", 366 | "\treturn model" 367 | ] 368 | }, 369 | { 370 | "cell_type": "code", 371 | "execution_count": 36, 372 | "metadata": {}, 373 | "outputs": [ 374 | { 375 | "name": "stdout", 376 | "output_type": "stream", 377 | "text": [ 378 | "__________________________________________________________________________________________________\n", 379 | "Layer (type) Output Shape Param # Connected to \n", 380 | "==================================================================================================\n", 381 | "input_12 (InputLayer) (None, 300) 0 \n", 382 | "__________________________________________________________________________________________________\n", 383 | "input_10 (InputLayer) (None, 300) 0 \n", 384 | "__________________________________________________________________________________________________\n", 385 | "input_11 (InputLayer) (None, 300) 0 \n", 386 | "__________________________________________________________________________________________________\n", 387 | "embedding_1 (Embedding) (None, 300, 300) 1510200 input_10[0][0] \n", 388 | " input_11[0][0] \n", 389 | " input_12[0][0] \n", 390 | " input_12[0][0] \n", 391 | "__________________________________________________________________________________________________\n", 392 | "conv1d_10 (Conv1D) (None, 297, 32) 38432 embedding_1[12][0] \n", 393 | "__________________________________________________________________________________________________\n", 394 | "conv1d_11 (Conv1D) (None, 295, 32) 57632 embedding_1[13][0] \n", 395 | "__________________________________________________________________________________________________\n", 396 | "conv1d_12 (Conv1D) (None, 293, 32) 76832 embedding_1[14][0] \n", 397 | "__________________________________________________________________________________________________\n", 398 | "dropout_10 (Dropout) (None, 297, 32) 0 conv1d_10[0][0] \n", 399 | "__________________________________________________________________________________________________\n", 400 | "dropout_11 (Dropout) (None, 295, 32) 0 conv1d_11[0][0] \n", 401 | "__________________________________________________________________________________________________\n", 402 | "dropout_12 (Dropout) (None, 293, 32) 0 conv1d_12[0][0] \n", 403 | "__________________________________________________________________________________________________\n", 404 | "max_pooling1d_10 (MaxPooling1D) (None, 148, 32) 0 dropout_10[0][0] \n", 405 | "__________________________________________________________________________________________________\n", 406 | "max_pooling1d_11 (MaxPooling1D) (None, 147, 32) 0 dropout_11[0][0] \n", 407 | "__________________________________________________________________________________________________\n", 408 | "max_pooling1d_12 (MaxPooling1D) (None, 146, 32) 0 dropout_12[0][0] \n", 409 | "__________________________________________________________________________________________________\n", 410 | "flatten_10 (Flatten) (None, 4736) 0 max_pooling1d_10[0][0] \n", 411 | "__________________________________________________________________________________________________\n", 412 | "flatten_11 (Flatten) (None, 4704) 0 max_pooling1d_11[0][0] \n", 413 | "__________________________________________________________________________________________________\n", 414 | "flatten_12 (Flatten) (None, 4672) 0 max_pooling1d_12[0][0] \n", 415 | "__________________________________________________________________________________________________\n", 416 | "lstm_4 (LSTM) (None, 128) 219648 embedding_1[15][0] \n", 417 | "__________________________________________________________________________________________________\n", 418 | "concatenate_7 (Concatenate) (None, 14112) 0 flatten_10[0][0] \n", 419 | " flatten_11[0][0] \n", 420 | " flatten_12[0][0] \n", 421 | "__________________________________________________________________________________________________\n", 422 | "concatenate_8 (Concatenate) (None, 14240) 0 lstm_4[0][0] \n", 423 | " concatenate_7[0][0] \n", 424 | "__________________________________________________________________________________________________\n", 425 | "dense_7 (Dense) (None, 10) 142410 concatenate_8[0][0] \n", 426 | "__________________________________________________________________________________________________\n", 427 | "dense_8 (Dense) (None, 6) 66 dense_7[0][0] \n", 428 | "==================================================================================================\n", 429 | "Total params: 2,045,220\n", 430 | "Trainable params: 2,045,220\n", 431 | "Non-trainable params: 0\n", 432 | "__________________________________________________________________________________________________\n", 433 | "None\n" 434 | ] 435 | } 436 | ], 437 | "source": [ 438 | "model= define_model(300,5034)" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": 37, 444 | "metadata": {}, 445 | "outputs": [ 446 | { 447 | "name": "stdout", 448 | "output_type": "stream", 449 | "text": [ 450 | "[[0. 0. 0. 0. 0. 1.]\n", 451 | " [0. 0. 0. 0. 0. 1.]\n", 452 | " [0. 0. 0. 0. 0. 1.]\n", 453 | " ...\n", 454 | " [1. 0. 0. 0. 0. 0.]\n", 455 | " [1. 0. 0. 0. 0. 0.]\n", 456 | " [1. 0. 0. 0. 0. 0.]]\n" 457 | ] 458 | } 459 | ], 460 | "source": [ 461 | "from keras.utils import to_categorical\n", 462 | "y_binary = to_categorical(trainY)\n", 463 | "print(y_binary)" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 39, 469 | "metadata": {}, 470 | "outputs": [ 471 | { 472 | "name": "stdout", 473 | "output_type": "stream", 474 | "text": [ 475 | "Train on 1120 samples, validate on 280 samples\n", 476 | "Epoch 1/1\n", 477 | "1120/1120 [==============================] - 9s 8ms/step - loss: 1.7872 - acc: 0.3571 - val_loss: 1.8007 - val_acc: 0.0000e+00\n" 478 | ] 479 | }, 480 | { 481 | "data": { 482 | "text/plain": [ 483 | "" 484 | ] 485 | }, 486 | "execution_count": 39, 487 | "metadata": {}, 488 | "output_type": "execute_result" 489 | } 490 | ], 491 | "source": [ 492 | "model.fit([trainX,trainX,trainX], array(y_binary), epochs=1, batch_size=128, validation_split=0.2)" 493 | ] 494 | }, 495 | { 496 | "cell_type": "code", 497 | "execution_count": null, 498 | "metadata": {}, 499 | "outputs": [], 500 | "source": [] 501 | } 502 | ], 503 | "metadata": { 504 | "kernelspec": { 505 | "display_name": "Python 3", 506 | "language": "python", 507 | "name": "python3" 508 | }, 509 | "language_info": { 510 | "codemirror_mode": { 511 | "name": "ipython", 512 | "version": 3 513 | }, 514 | "file_extension": ".py", 515 | "mimetype": "text/x-python", 516 | "name": "python", 517 | "nbconvert_exporter": "python", 518 | "pygments_lexer": "ipython3", 519 | "version": "3.6.7" 520 | } 521 | }, 522 | "nbformat": 4, 523 | "nbformat_minor": 2 524 | } 525 | -------------------------------------------------------------------------------- /HateSpeechDetection_Multichannel_CNN_LSTM/Hatespeech_detection_MConv_LSTM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 40, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import os\n", 10 | "\n", 11 | "os.environ[\"CUDA_DEVICE_ORDER\"]=\"PCI_BUS_ID\";\n", 12 | " \n", 13 | "# The GPU id to use, usually either \"0\" or \"1\";\n", 14 | "os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0\"; " 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 41, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "#importing libraries \n", 24 | "import sklearn\n", 25 | "import numpy as np\n", 26 | "from glob import glob\n", 27 | "from sklearn import datasets\n", 28 | "from sklearn.model_selection import train_test_split\n", 29 | "from sklearn.feature_extraction.text import CountVectorizer\n", 30 | "from sklearn.feature_extraction.text import TfidfTransformer\n", 31 | "from sklearn.linear_model import SGDClassifier\n", 32 | "from sklearn.ensemble import RandomForestClassifier\n", 33 | "from sklearn import metrics\n", 34 | "from sklearn.pipeline import Pipeline \n", 35 | "\n", 36 | "import string\n", 37 | "from os import listdir\n", 38 | "from nltk.corpus import stopwords\n", 39 | "from nltk.corpus import stopwords\n", 40 | "from pickle import dump\n", 41 | "from string import punctuation\n", 42 | "\n", 43 | "from numpy import array\n", 44 | "from keras.preprocessing.text import Tokenizer\n", 45 | "from keras.preprocessing.sequence import pad_sequences\n", 46 | "from keras.utils.vis_utils import plot_model\n", 47 | "from keras.models import Model\n", 48 | "from keras.layers import Input\n", 49 | "from keras.layers import Dense\n", 50 | "from keras.layers import Flatten\n", 51 | "from keras.layers import Dropout\n", 52 | "from keras.layers import Embedding\n", 53 | "from keras.layers.convolutional import Conv1D\n", 54 | "from keras.layers import LSTM\n", 55 | "from keras.layers.convolutional import MaxPooling1D\n", 56 | "from keras.layers.merge import concatenate\n", 57 | "from pickle import load\n", 58 | "\n", 59 | "import gensim\n", 60 | "from gensim.models import Word2Vec\n", 61 | "from gensim.utils import simple_preprocess\n", 62 | "\n", 63 | "import csv, string" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 42, 69 | "metadata": {}, 70 | "outputs": [ 71 | { 72 | "name": "stdout", 73 | "output_type": "stream", 74 | "text": [ 75 | "{'Geopoitical Hate': 1, 'Political Hate': 4, 'Political Normal': 3, 'Personal Hate': 5, 'Religious Hate': 2, 'Gender abusive hate': 0}\n" 76 | ] 77 | } 78 | ], 79 | "source": [ 80 | "categories = ['Gender abusive hate', 'Geopoitical Hate','Religious Hate','Political Normal','Political Hate','Personal Hate']\n", 81 | "num_of_labels=len(categories)\n", 82 | "categories_dict={key:value for value,key in enumerate(categories)}\n", 83 | "categories_inverse_dict={key:value for key,value in enumerate(categories)}\n", 84 | "print(categories_dict)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 43, 90 | "metadata": {}, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "['অতএব', 'অথচ']\n", 97 | "\n" 98 | ] 99 | } 100 | ], 101 | "source": [ 102 | "stop_words='stopwords_bn.txt'\n", 103 | "text_data=[]\n", 104 | "with open(stop_words,'r',encoding='utf-8') as temp_output_file:\n", 105 | " reader=csv.reader(temp_output_file, delimiter='\\n')\n", 106 | " for row in reader:\n", 107 | " text_data.append(row)\n", 108 | "stop_word_list=[x[0] for x in text_data]\n", 109 | "print(stop_word_list[0:2])\n", 110 | "print(type(stop_word_list))" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 44, 116 | "metadata": {}, 117 | "outputs": [], 118 | "source": [ 119 | "def save_dataset(dataset, filename):\n", 120 | " dump(dataset, open(filename,'wb'))\n", 121 | " print('Saved :%s' % filename)\n", 122 | "\n", 123 | "def load_doc(filename):\n", 124 | " file=open(filename,'r',encoding='utf-8')\n", 125 | " text=file.read()\n", 126 | " file.close()\n", 127 | " return text\n", 128 | "\n", 129 | "def clean_doc(doc, stop_word_list):\n", 130 | " # split into tokens by white space\n", 131 | " sentences=list()\n", 132 | " \n", 133 | " for sentence in doc:\n", 134 | " # remove punctuation from each token\n", 135 | " \n", 136 | " table = str.maketrans('', '', string.punctuation)\n", 137 | " tokens = [w.translate(table) for w in sentence.split(' ')] # I belive word in sentence\n", 138 | " sentences.append(' '.join(tokens))\n", 139 | " return sentences" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 45, 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [ 148 | "def load_data_and_labels(filename,stop_word_list):\n", 149 | " doc=load_doc(filename)\n", 150 | " x_doc=list()\n", 151 | " label=list()\n", 152 | " for line in doc.split('\\n'):\n", 153 | " x_and_label=line.split('\\t')\n", 154 | " #print(x_and_label)\n", 155 | " x_doc.append(x_and_label[1])\n", 156 | " label.append(categories_dict[x_and_label[0]])\n", 157 | " \n", 158 | " #print(x_doc)\n", 159 | " #print(label)\n", 160 | " trainX = clean_doc(x_doc, stopwords)\n", 161 | " return trainX, label\n", 162 | " " 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 46, 168 | "metadata": {}, 169 | "outputs": [], 170 | "source": [ 171 | "X_train, y_train = load_data_and_labels('Hate_Speech_Train.csv',stop_word_list)" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": 62, 177 | "metadata": {}, 178 | "outputs": [ 179 | { 180 | "name": "stdout", 181 | "output_type": "stream", 182 | "text": [ 183 | "[[ 137 238 1016 ... 0 0 0]\n", 184 | " [ 2 239 138 ... 0 0 0]\n", 185 | " [ 35 139 140 ... 0 0 0]\n", 186 | " ...\n", 187 | " [ 6 47 2 ... 0 0 0]\n", 188 | " [ 36 8 580 ... 0 0 0]\n", 189 | " [ 298 98 138 ... 0 0 0]]\n" 190 | ] 191 | } 192 | ], 193 | "source": [ 194 | "print(X_train[0:10])" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 48, 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [ 203 | "def create_tokenizer(lines):\n", 204 | " tokenizer=Tokenizer()\n", 205 | " tokenizer.fit_on_texts(lines)\n", 206 | " return tokenizer\n", 207 | "\n", 208 | "def encode_text(tokenizer, lines, length):\n", 209 | " #print(lines)\n", 210 | " encoded=tokenizer.texts_to_sequences(lines)\n", 211 | " print(encoded[0:10])\n", 212 | " padded= pad_sequences(encoded, maxlen=length, padding='post')\n", 213 | " return padded" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 49, 219 | "metadata": {}, 220 | "outputs": [], 221 | "source": [ 222 | "train_tokenizer=create_tokenizer(X_train)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 50, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "name": "stdout", 232 | "output_type": "stream", 233 | "text": [ 234 | "Max document length: 300\n", 235 | "Vocabulary size: 3417\n", 236 | "\n", 237 | "[[137, 238, 1016, 576, 1017, 577, 65], [2, 239, 138, 1018, 32, 46, 32, 1019, 240, 578], [35, 139, 140, 1020, 1, 1021, 4, 1], [13, 81, 1022, 1023, 33, 1024, 14, 4, 1025], [295, 1026, 6, 1027, 162], [141, 114, 1028, 1029, 1030, 1031, 6, 1032, 1033, 579, 1034, 1035], [1036, 296, 1037, 1038, 1039, 1, 1040, 1041, 241, 97], [6, 47, 2, 1042, 1043, 163, 1044, 1045, 389, 297, 241, 1046, 1047, 1048, 24], [36, 8, 580, 1049, 1050, 1051, 1052], [298, 98, 138, 47, 191, 1053, 14, 1054, 1055]]\n", 238 | "(877, 300)\n" 239 | ] 240 | } 241 | ], 242 | "source": [ 243 | "trainLength=300\n", 244 | "vocab_size=len(train_tokenizer.word_index)+1\n", 245 | "print('Max document length: %d' % trainLength)\n", 246 | "print('Vocabulary size: %d' % vocab_size)\n", 247 | "print()\n", 248 | "X_train = encode_text(train_tokenizer, X_train, trainLength)\n", 249 | "print(X_train.shape)\n", 250 | "#trainX[2]" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 51, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [ 259 | "word_vectors = Word2Vec.load('C:/Users/admin-karim/Desktop/BengWord2Vec/posts.bin')" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 52, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "name": "stderr", 269 | "output_type": "stream", 270 | "text": [ 271 | "c:\\users\\admin-karim\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\ipykernel_launcher.py:12: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).\n", 272 | " if sys.path[0] == '':\n" 273 | ] 274 | } 275 | ], 276 | "source": [ 277 | "NUM_WORDS=20000\n", 278 | "EMBEDDING_DIM=300\n", 279 | "\n", 280 | "vocabulary_size=len(train_tokenizer.word_index)+1\n", 281 | "word_index=tokenizer.word_index\n", 282 | "embedding_matrix = np.zeros((vocabulary_size, EMBEDDING_DIM))\n", 283 | "\n", 284 | "for word, i in word_index.items():\n", 285 | " if i>=NUM_WORDS:\n", 286 | " continue\n", 287 | " try:\n", 288 | " embedding_vector=word_vectors[word]\n", 289 | " embedding_matrix[i]=embedding_vector\n", 290 | " except KeyError:\n", 291 | " embedding_matrix[i]=np.random.normal(0,np.sqrt(0.25),EMBEDDING_DIM)\n", 292 | "\n", 293 | "del(word_vectors)" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 53, 299 | "metadata": {}, 300 | "outputs": [], 301 | "source": [ 302 | "embedding_layer=Embedding(vocabulary_size, EMBEDDING_DIM, weights=[embedding_matrix],trainable=False)" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 54, 308 | "metadata": {}, 309 | "outputs": [], 310 | "source": [ 311 | "# define the model\n", 312 | "def define_model(length, vocab_size):\n", 313 | "\t# channel 1\n", 314 | "\tinput1 = Input(shape=(length,))\n", 315 | "\tembedding_layer_1 = embedding_layer(input1)\n", 316 | "\tconv1 = Conv1D(filters=32, kernel_size=4, activation='relu')(embedding_layer_1)\n", 317 | "\tdrop1 = Dropout(0.5)(conv1)\n", 318 | "\tpool1 = MaxPooling1D(pool_size=2)(drop1)\n", 319 | "\tflat1 = Flatten()(pool1)\n", 320 | " \n", 321 | "\t# channel 2\n", 322 | "\tinput2 = Input(shape=(length,))\n", 323 | "\tembedding_layer_2 = embedding_layer(input2)\n", 324 | "\tconv2 = Conv1D(filters=32, kernel_size=6, activation='relu')(embedding_layer_2)\n", 325 | "\tdrop2 = Dropout(0.5)(conv2)\n", 326 | "\tpool2 = MaxPooling1D(pool_size=2)(drop2)\n", 327 | "\tflat2 = Flatten()(pool2)\n", 328 | " \n", 329 | "\t# channel 3\n", 330 | "\tinput3 = Input(shape=(length,))\n", 331 | "\tembedding_layer_3 = embedding_layer(input3)\n", 332 | "\tconv3 = Conv1D(filters=32, kernel_size=8, activation='relu')(embedding_layer_3)\n", 333 | "\tdrop3 = Dropout(0.5)(conv3)\n", 334 | "\tpool3 = MaxPooling1D(pool_size=2)(drop3)\n", 335 | "\tflat3 = Flatten()(pool3)\n", 336 | " \n", 337 | "\t# merge\n", 338 | "\tCNN_layer = concatenate([flat1, flat2, flat3])\n", 339 | " \n", 340 | "\t# LSTM\n", 341 | "\tx = embedding_layer(input3)\n", 342 | "\tLSTM_layer = LSTM(128)(x)\n", 343 | "\n", 344 | "\tCNN_LSTM_layer = concatenate([LSTM_layer, CNN_layer])\n", 345 | " \n", 346 | "\t# interpretation\n", 347 | "\tdense1 = Dense(10, activation='relu')(CNN_LSTM_layer)\n", 348 | "\toutputs = Dense(num_of_labels, activation='softmax')(dense1)\n", 349 | "\tmodel = Model(inputs=[input1, input2, input3], outputs=outputs)\n", 350 | " \n", 351 | "\t# compile\n", 352 | "\tmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 353 | " \n", 354 | "\t# summarize\n", 355 | "\tprint(model.summary())\n", 356 | " \n", 357 | "\treturn model" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": 55, 363 | "metadata": {}, 364 | "outputs": [ 365 | { 366 | "name": "stdout", 367 | "output_type": "stream", 368 | "text": [ 369 | "__________________________________________________________________________________________________\n", 370 | "Layer (type) Output Shape Param # Connected to \n", 371 | "==================================================================================================\n", 372 | "input_6 (InputLayer) (None, 300) 0 \n", 373 | "__________________________________________________________________________________________________\n", 374 | "input_4 (InputLayer) (None, 300) 0 \n", 375 | "__________________________________________________________________________________________________\n", 376 | "input_5 (InputLayer) (None, 300) 0 \n", 377 | "__________________________________________________________________________________________________\n", 378 | "embedding_2 (Embedding) (None, 300, 300) 1025100 input_4[0][0] \n", 379 | " input_5[0][0] \n", 380 | " input_6[0][0] \n", 381 | " input_6[0][0] \n", 382 | "__________________________________________________________________________________________________\n", 383 | "conv1d_4 (Conv1D) (None, 297, 32) 38432 embedding_2[0][0] \n", 384 | "__________________________________________________________________________________________________\n", 385 | "conv1d_5 (Conv1D) (None, 295, 32) 57632 embedding_2[1][0] \n", 386 | "__________________________________________________________________________________________________\n", 387 | "conv1d_6 (Conv1D) (None, 293, 32) 76832 embedding_2[2][0] \n", 388 | "__________________________________________________________________________________________________\n", 389 | "dropout_4 (Dropout) (None, 297, 32) 0 conv1d_4[0][0] \n", 390 | "__________________________________________________________________________________________________\n", 391 | "dropout_5 (Dropout) (None, 295, 32) 0 conv1d_5[0][0] \n", 392 | "__________________________________________________________________________________________________\n", 393 | "dropout_6 (Dropout) (None, 293, 32) 0 conv1d_6[0][0] \n", 394 | "__________________________________________________________________________________________________\n", 395 | "max_pooling1d_4 (MaxPooling1D) (None, 148, 32) 0 dropout_4[0][0] \n", 396 | "__________________________________________________________________________________________________\n", 397 | "max_pooling1d_5 (MaxPooling1D) (None, 147, 32) 0 dropout_5[0][0] \n", 398 | "__________________________________________________________________________________________________\n", 399 | "max_pooling1d_6 (MaxPooling1D) (None, 146, 32) 0 dropout_6[0][0] \n", 400 | "__________________________________________________________________________________________________\n", 401 | "flatten_4 (Flatten) (None, 4736) 0 max_pooling1d_4[0][0] \n", 402 | "__________________________________________________________________________________________________\n", 403 | "flatten_5 (Flatten) (None, 4704) 0 max_pooling1d_5[0][0] \n", 404 | "__________________________________________________________________________________________________\n", 405 | "flatten_6 (Flatten) (None, 4672) 0 max_pooling1d_6[0][0] \n", 406 | "__________________________________________________________________________________________________\n", 407 | "lstm_2 (LSTM) (None, 128) 219648 embedding_2[3][0] \n", 408 | "__________________________________________________________________________________________________\n", 409 | "concatenate_3 (Concatenate) (None, 14112) 0 flatten_4[0][0] \n", 410 | " flatten_5[0][0] \n", 411 | " flatten_6[0][0] \n", 412 | "__________________________________________________________________________________________________\n", 413 | "concatenate_4 (Concatenate) (None, 14240) 0 lstm_2[0][0] \n", 414 | " concatenate_3[0][0] \n", 415 | "__________________________________________________________________________________________________\n", 416 | "dense_3 (Dense) (None, 10) 142410 concatenate_4[0][0] \n", 417 | "__________________________________________________________________________________________________\n", 418 | "dense_4 (Dense) (None, 6) 66 dense_3[0][0] \n", 419 | "==================================================================================================\n", 420 | "Total params: 1,560,120\n", 421 | "Trainable params: 535,020\n", 422 | "Non-trainable params: 1,025,100\n", 423 | "__________________________________________________________________________________________________\n", 424 | "None\n" 425 | ] 426 | } 427 | ], 428 | "source": [ 429 | "model= define_model(EMBEDDING_DIM,vocabulary_size)" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": 56, 435 | "metadata": {}, 436 | "outputs": [], 437 | "source": [ 438 | "from keras.utils import to_categorical\n", 439 | "\n", 440 | "def toCategorical(y):\n", 441 | " y = to_categorical(y)\n", 442 | " return y" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": 57, 448 | "metadata": {}, 449 | "outputs": [], 450 | "source": [ 451 | "y_train = toCategorical(y_train)" 452 | ] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "execution_count": 58, 457 | "metadata": {}, 458 | "outputs": [ 459 | { 460 | "name": "stdout", 461 | "output_type": "stream", 462 | "text": [ 463 | "Train on 701 samples, validate on 176 samples\n", 464 | "Epoch 1/20\n", 465 | "701/701 [==============================] - 12s 17ms/step - loss: 1.6760 - acc: 0.2539 - val_loss: 3.3705 - val_acc: 0.0398\n", 466 | "Epoch 2/20\n", 467 | "701/701 [==============================] - 9s 14ms/step - loss: 1.3261 - acc: 0.4579 - val_loss: 5.2184 - val_acc: 0.0000e+00\n", 468 | "Epoch 3/20\n", 469 | "701/701 [==============================] - 9s 13ms/step - loss: 1.1300 - acc: 0.5449 - val_loss: 6.8787 - val_acc: 0.0000e+00\n", 470 | "Epoch 4/20\n", 471 | "701/701 [==============================] - 12s 16ms/step - loss: 1.0058 - acc: 0.5877 - val_loss: 8.1012 - val_acc: 0.0000e+00\n", 472 | "Epoch 5/20\n", 473 | "701/701 [==============================] - 11s 16ms/step - loss: 0.8959 - acc: 0.6391 - val_loss: 9.2797 - val_acc: 0.0000e+00\n", 474 | "Epoch 6/20\n", 475 | "701/701 [==============================] - 22s 32ms/step - loss: 0.8244 - acc: 0.6534 - val_loss: 9.5983 - val_acc: 0.0000e+00\n", 476 | "Epoch 7/20\n", 477 | "701/701 [==============================] - 24s 34ms/step - loss: 0.7083 - acc: 0.7361 - val_loss: 9.9701 - val_acc: 0.0057\n", 478 | "Epoch 8/20\n", 479 | "701/701 [==============================] - 28s 40ms/step - loss: 0.6185 - acc: 0.7575 - val_loss: 10.3135 - val_acc: 0.0114\n", 480 | "Epoch 9/20\n", 481 | "701/701 [==============================] - 28s 40ms/step - loss: 0.5373 - acc: 0.8160 - val_loss: 10.8100 - val_acc: 0.0057\n", 482 | "Epoch 10/20\n", 483 | "701/701 [==============================] - 20s 29ms/step - loss: 0.4488 - acc: 0.8374 - val_loss: 11.3847 - val_acc: 0.0000e+00\n", 484 | "Epoch 11/20\n", 485 | "701/701 [==============================] - 23s 33ms/step - loss: 0.3866 - acc: 0.8688 - val_loss: 11.7607 - val_acc: 0.0000e+00\n", 486 | "Epoch 12/20\n", 487 | "701/701 [==============================] - 26s 38ms/step - loss: 0.3355 - acc: 0.8902 - val_loss: 12.0179 - val_acc: 0.0000e+00\n", 488 | "Epoch 13/20\n", 489 | "701/701 [==============================] - 23s 32ms/step - loss: 0.2882 - acc: 0.9301 - val_loss: 12.1809 - val_acc: 0.0057\n", 490 | "Epoch 14/20\n", 491 | "701/701 [==============================] - 21s 29ms/step - loss: 0.2529 - acc: 0.9358 - val_loss: 12.3040 - val_acc: 0.0000e+00\n", 492 | "Epoch 15/20\n", 493 | "701/701 [==============================] - 19s 27ms/step - loss: 0.2402 - acc: 0.9201 - val_loss: 12.4246 - val_acc: 0.0057\n", 494 | "Epoch 16/20\n", 495 | "701/701 [==============================] - 18s 25ms/step - loss: 0.2199 - acc: 0.9458 - val_loss: 12.3804 - val_acc: 0.0114\n", 496 | "Epoch 17/20\n", 497 | "701/701 [==============================] - 21s 30ms/step - loss: 0.1884 - acc: 0.9458 - val_loss: 12.5150 - val_acc: 0.0000e+00\n", 498 | "Epoch 18/20\n", 499 | "701/701 [==============================] - 20s 29ms/step - loss: 0.1621 - acc: 0.9643 - val_loss: 12.4372 - val_acc: 0.0227\n", 500 | "Epoch 19/20\n", 501 | "701/701 [==============================] - 20s 28ms/step - loss: 0.1485 - acc: 0.9686 - val_loss: 12.6193 - val_acc: 0.0227\n", 502 | "Epoch 20/20\n", 503 | "701/701 [==============================] - 22s 32ms/step - loss: 0.1394 - acc: 0.9672 - val_loss: 12.6117 - val_acc: 0.0057\n" 504 | ] 505 | }, 506 | { 507 | "data": { 508 | "text/plain": [ 509 | "" 510 | ] 511 | }, 512 | "execution_count": 58, 513 | "metadata": {}, 514 | "output_type": "execute_result" 515 | } 516 | ], 517 | "source": [ 518 | "model.fit([X_train,X_train,X_train], y_train, epochs=20, batch_size=128, validation_split=0.2)" 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "execution_count": 59, 524 | "metadata": {}, 525 | "outputs": [], 526 | "source": [ 527 | "# save the model\n", 528 | "model.save('MConv_LSTM_model.h5')" 529 | ] 530 | }, 531 | { 532 | "cell_type": "code", 533 | "execution_count": 60, 534 | "metadata": {}, 535 | "outputs": [], 536 | "source": [ 537 | "X_test, y_test = load_data_and_labels('Hate_Speech_Test.csv',stop_word_list)\n", 538 | "y_test = toCategorical(y_test)" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": 61, 544 | "metadata": {}, 545 | "outputs": [ 546 | { 547 | "name": "stdout", 548 | "output_type": "stream", 549 | "text": [ 550 | "Max document length: 300\n", 551 | "Vocabulary size: 1616\n", 552 | "\n", 553 | "[[222, 409, 410, 411, 412, 22], [145, 47, 81, 48, 146, 413, 414, 82, 109], [415, 223, 42, 224, 5, 416], [417, 418, 419, 225, 23], [110, 10, 420, 226, 227, 421, 228, 422, 423, 424, 229, 230, 147, 231, 1, 36, 425, 37, 426], [148, 427, 38, 428, 232, 83, 111, 38, 429, 1], [26, 233, 430, 149], [431, 432, 14, 433, 434], [435, 23, 234, 235, 236, 436], [26, 17, 47]]\n", 554 | "(323, 300)\n", 555 | "Test accuracy: 30.650155\n" 556 | ] 557 | } 558 | ], 559 | "source": [ 560 | "from pickle import load\n", 561 | "from numpy import array\n", 562 | "from keras.preprocessing.sequence import pad_sequences\n", 563 | "from keras.models import load_model \n", 564 | " \n", 565 | "tokenizer_test = create_tokenizer(X_test)\n", 566 | "\n", 567 | "trainLength=300\n", 568 | "vocab_size=len(tokenizer_test.word_index)+1\n", 569 | "print('Max document length: %d' % trainLength)\n", 570 | "print('Vocabulary size: %d' % vocab_size)\n", 571 | "print()\n", 572 | "X_test = encode_text(tokenizer_test, X_test, trainLength)\n", 573 | "print(X_test.shape)\n", 574 | "#trainX[2]\n", 575 | "\n", 576 | "# load the model\n", 577 | "model = load_model('MConv_LSTM_model.h5') \n", 578 | "\n", 579 | "# evaluate model on test dataset dataset\n", 580 | "loss, acc = model.evaluate([X_test,X_test,X_test], y_test, verbose=0)\n", 581 | "print('Test accuracy: %f' % (acc*100))" 582 | ] 583 | }, 584 | { 585 | "cell_type": "code", 586 | "execution_count": null, 587 | "metadata": {}, 588 | "outputs": [], 589 | "source": [] 590 | } 591 | ], 592 | "metadata": { 593 | "kernelspec": { 594 | "display_name": "Python 3", 595 | "language": "python", 596 | "name": "python3" 597 | }, 598 | "language_info": { 599 | "codemirror_mode": { 600 | "name": "ipython", 601 | "version": 3 602 | }, 603 | "file_extension": ".py", 604 | "mimetype": "text/x-python", 605 | "name": "python", 606 | "nbconvert_exporter": "python", 607 | "pygments_lexer": "ipython3", 608 | "version": "3.5.2" 609 | } 610 | }, 611 | "nbformat": 4, 612 | "nbformat_minor": 2 613 | } 614 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Md. Rezaul Karim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MakeWordVectors/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Kyubyong Park 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MakeWordVectors/README.md: -------------------------------------------------------------------------------- 1 | # Code for BengWord2Vec 2 | 3 | Our BengWord2Vec is technically a Word2Vec model, which is based on 250 articles. This is based on https://github.com/Kyubyong/wordvectors, implementation but with additional midifications and updates. 4 | 5 | ## Requirements 6 | * nltk >= 1.11.1 7 | * regex >= 2016.6.24 8 | * lxml >= 3.3.3 9 | * numpy >= 1.11.2 10 | * gensim > =0.13.1 (for Word2Vec) 11 | 12 | ## References 13 | * Check [this](https://github.com/Kyubyong/wordvectors) to know how to prepare Word2Vec model for other languages such as Korean, Japanese, French etc. embedding is. 14 | 15 | ## Workflow of training the BengWord2Vec model 16 | * STEP 1. Download the [this](https://dumps.wikimedia.org/backup-index.html) in case you don't want to collect all the raw text. 17 | * STEP 2. Extract running texts to `data/` folder. 18 | * STEP 3. Run `build_corpus.py` using `python3 build_corpus.py` 19 | * STEP 4. Run `sudo ./make_wordvector.sh` to get the BengWord2Vec word vectors but make sure it's already executable. 20 | 21 | ## Pre-trained BengWord2Vec model 22 | | Language | UTF-8 | Vector Size | Corpus Size | Vocabulary Size | 23 | | --- |--- |--- |--- |--- | 24 | |[Bengali (BengWord2Vec)](https://drive.google.com/open?id=1Q_45PQpRWQvZL2p8sIngmgg6Tr5YbKmH) \| [Bengali (f)](https://drive.google.com/open?id=1Q_45PQpRWQvZL2p8sIngmgg6Tr5YbKmH)|bn|300|250M |30059| negative sampling | 25 | 26 | * Check [this](https://drive.google.com/open?id=1Q_45PQpRWQvZL2p8sIngmgg6Tr5YbKmH) for the pre-trained BengWord2Vec model. 27 | 28 | -------------------------------------------------------------------------------- /MakeWordVectors/build_corpus.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | #!/usr/bin/python2 3 | import argparse 4 | import codecs 5 | import lxml.etree as ET 6 | import os 7 | import regex 8 | 9 | # arguments setting 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('--lcode', help='ISO 639-1 code of target language. See `lcodes.txt`.') 12 | parser.add_argument('--max_corpus_size', type=int, default=1000000000, help='the maximum size of the corpus. Feel free to adjust it according to your computing power.') 13 | args = parser.parse_args() 14 | 15 | lcode = args.lcode 16 | if lcode == 'ko': 17 | from konlpy.tag import Kkma # pip install konlpy. See http://konlpy.org/en/v0.4.4/ for further information. 18 | kkma = Kkma() 19 | print "kkma succesfuly loaded!" 20 | elif lcode == 'ja': 21 | import MeCab # See https://pypi.python.org/pypi/mecab-python/0.996 22 | mecab = MeCab.Tagger("-Owakati") 23 | print "mecab succesfuly loaded!" 24 | elif lcode == 'zh': 25 | import jieba # See https://pypi.python.org/pypi/jieba/ 26 | print "jieba succesfuly loaded!" 27 | elif lcode == 'vi': 28 | from pyvi.pyvi import ViTokenizer # See https://pypi.python.org/pypi/pyvi 29 | print "pyvi succesfuly loaded!" 30 | elif lcode == 'th': 31 | import pythai # See https://pypi.python.org/pypi/pythai 32 | print "pythai succesfuly loaded!" 33 | # elif lcode == 'ar': 34 | # os.environ['CLASSPATH'] = "../stanford-segmenter-2015-12-09" 35 | # from nltk.tokenize.stanford_segmenter import StanfordSegmenter 36 | # segmenter = StanfordSegmenter(path_to_jar="../stanford-segmenter-2015-12-09/stanford-segmenter-3.6.0.jar", 37 | # path_to_sihan_corpora_dict="../stanford-segmenter-2015-12-09/data", 38 | # path_to_model="../stanford-segmenter-2015-12-09/data/pku.gz", 39 | # path_to_dict="../stanford-segmenter-2015-12-09/data/dict-chris6.ser.gz") 40 | # print "StanfordSegmenter succesfuly loaded!" 41 | 42 | max_corpus_size = args.max_corpus_size 43 | fname = "bnwikibooks-20181001-pages-articles-multistream.xml" 44 | 45 | def clean_text(text): 46 | global lcode 47 | 48 | # Common 49 | text = regex.sub("(?s).+?", "", text) # remove reference links 50 | text = regex.sub("(?s)<[^>]+>", "", text) # remove html tags 51 | text = regex.sub("&[a-z]+;", "", text) # remove html entities 52 | text = regex.sub("(?s){{.+?}}", "", text) # remove markup tags 53 | text = regex.sub("(?s){.+?}", "", text) # remove markup tags 54 | text = regex.sub("(?s)\[\[([^]]+\|)", "", text) # remove link target strings 55 | text = regex.sub("(?s)\[\[([^]]+\:.+?]])", "", text) # remove media links 56 | 57 | text = regex.sub("[']{5}", "", text) # remove italic+bold symbols 58 | text = regex.sub("[']{3}", "", text) # remove bold symbols 59 | text = regex.sub("[']{2}", "", text) # remove italic symbols 60 | 61 | if lcode in ['ko']: # korean 62 | text = regex.sub(u"[^ \r\n\p{Hangul}.?!]", " ", text) # Replace unacceptable characters with a space. 63 | elif lcode in ['ja']: # japanese 64 | text = regex.sub(u"[^\r\n\p{Han}\p{Hiragana}\p{Katakana}ー。!?]", "", text) 65 | elif lcode in ['zh']: # chinsese 66 | text = regex.sub(u"[^\r\n\p{Han}。!?]", "", text) 67 | elif lcode in ['th']: # thai 68 | text = regex.sub(u"[^ \r\n\p{Thai}.?!]", " ", text) 69 | elif lcode in ['ru']: # russian 70 | text = regex.sub(u"[^ \r\n\p{Cyrillic}.?!\-]", " ", text) 71 | text = text.lower() 72 | # elif lcode in ['ar']: # arabic 73 | # text = regex.sub(u"[^ \r\n\p{Arabic}.?!\-]", " ", text) 74 | elif lcode in ['hi']: # hindi 75 | text = regex.sub(u"[^ \r\n\p{Devanagari}.।?!\-]", " ", text) 76 | elif lcode in ['bn']: # bengali 77 | text = regex.sub(u"[^ \r\n\p{Bengali}.।?!\-]", " ", text) 78 | elif lcode in ['de']: # german 79 | text = regex.sub(u"[^ \r\n\p{Latin}\-'‘’.?!]", " ", text) 80 | else: # Mostly european languages 81 | text = regex.sub(u"[^ \r\n\p{Latin}\-'‘’.?!]", " ", text) 82 | text = text.lower() 83 | 84 | # Common 85 | text = regex.sub("[ ]{2,}", " ", text) # Squeeze spaces. 86 | return text 87 | 88 | def sentence_segment(text): 89 | ''' 90 | Args: 91 | text: A string. A unsegmented paragraph. 92 | 93 | Returns: 94 | A list of sentences. 95 | ''' 96 | global lcode 97 | if lcode in ['ja', 'zh']: 98 | sents = regex.split(u"([。!?])?[\n]+|[。!?]", text) 99 | elif lcode in ['th']: 100 | sents = text.split("[\n]+") 101 | elif lcode in ['hi', 'bn']: # hindi, bengali 102 | sents = regex.split(u"([.।?!])?[\n]+|[.।?!] ", text) 103 | elif lcode in ['de']: # german 104 | sents = regex.split("([.?!])?[\n]+|[.?!] ", text) 105 | sents = [sent[0].lower() + sent[1:] for sent in sents if sent is not None and len(sent) > 1] 106 | else: 107 | sents = regex.split("([.?!])?[\n]+|[.?!] ", text) 108 | return sents 109 | 110 | def word_segment(sent): 111 | ''' 112 | Args: 113 | sent: A string. A sentence. 114 | 115 | Returns: 116 | A list of words. 117 | ''' 118 | global lcode 119 | if lcode in ['ko']: 120 | words = [word for word, _ in kkma.pos(sent)] 121 | elif lcode in ['ja']: 122 | words = mecab.parse(sent.encode('utf8')).split() 123 | elif lcode in ['th']: 124 | words = pythai.split(sent) 125 | elif lcode in ['vi']: 126 | words = ViTokenizer.tokenize(sent).split() 127 | elif lcode in ['zh']: 128 | words = list(jieba.cut(sent, cut_all=False)) 129 | # elif lcode in ['ar']: 130 | # words = segmenter.segment(sent).split() 131 | else: # Mostly european languages 132 | words = sent.split() 133 | 134 | return words 135 | 136 | def build_corpus(): 137 | global lcode, max_corpus_size, fname 138 | with codecs.open("data/{}.txt".format(lcode), 'w', 'utf-8') as fout: 139 | i = 1 140 | j = 1 141 | ns = "{http://www.mediawiki.org/xml/export-0.10/}" # namespace 142 | for _, elem in ET.iterparse("data/{}".format(fname), tag=ns+"text"): 143 | running_text = elem.text 144 | try: 145 | running_text = clean_text(running_text) 146 | sents = sentence_segment(running_text) 147 | for sent in sents: 148 | if sent is not None: 149 | words = word_segment(sent) 150 | if len(words) > 10: 151 | if lcode in ['ja']: 152 | fout.write(" ".join(words).decode('utf8') + "\n") 153 | else: 154 | fout.write(" ".join(words) + "\n") 155 | 156 | except: 157 | continue # it's okay as we have a pretty big corpus! 158 | elem.clear() # We need to save memory! 159 | if i % 1000 == 0: 160 | print i, 161 | fsize = os.path.getsize("data/{}.txt".format(lcode)) 162 | if fsize > max_corpus_size: 163 | break 164 | i += 1 165 | 166 | if __name__ == "__main__": 167 | build_corpus() 168 | 169 | print "Done" 170 | -------------------------------------------------------------------------------- /MakeWordVectors/evaluate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2 2 | import nltk 3 | import os 4 | import codecs 5 | import argparse 6 | import numpy as np 7 | 8 | import sys 9 | reload(sys) 10 | sys.setdefaultencoding("ISO-8859-1") 11 | 12 | import gensim # In case you have difficulties installing gensim, you need to consider installing conda. 13 | 14 | model = gensim.models.KeyedVectors.load_word2vec_format('/home/karim/wordvectors/data/bangla_word2vec_model/bn.bin', binary=True) 15 | 16 | # Some predefined functions that show content related information for given words 17 | print(model.most_similar(positive=['woman', 'king'], negative=['man'])) 18 | 19 | print(model.doesnt_match("breakfast cereal dinner lunch".split())) 20 | 21 | print(model.similarity('woman', 'man')) -------------------------------------------------------------------------------- /MakeWordVectors/fasttext.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Make sure you install fastText. https://github.com/facebookresearch/fastText 4 | ./fasttext skipgram -input data/bn.txt -output data/fasttext/bn -dim 300 -minCount 79 5 | ./fasttext skipgram -input data/ca.txt -output data/fasttext/ca -dim 300 -minCount 124 6 | ./fasttext skipgram -input data/zh.txt -output data/fasttext/zh -dim 300 -minCount 209 7 | ./fasttext skipgram -input data/da.txt -output data/fasttext/da -dim 300 -minCount 88 8 | ./fasttext skipgram -input data/nl.txt -output data/fasttext/nl -dim 300 -minCount 121 9 | ./fasttext skipgram -input data/eo.txt -output data/fasttext/eo -dim 300 -minCount 38 10 | ./fasttext skipgram -input data/fi.txt -output data/fasttext/fi -dim 300 -minCount 169 11 | ./fasttext skipgram -input data/fr.txt -output data/fasttext/fr -dim 300 -minCount 131 12 | ./fasttext skipgram -input data/de.txt -output data/fasttext/de -dim 300 -minCount 152 13 | ./fasttext skipgram -input data/hi.txt -output data/fasttext/hi -dim 300 -minCount 29 14 | ./fasttext skipgram -input data/hu.txt -output data/fasttext/hu -dim 300 -minCount 173 15 | ./fasttext skipgram -input data/id.txt -output data/fasttext/id -dim 300 -minCount 95 16 | ./fasttext skipgram -input data/it.txt -output data/fasttext/it -dim 300 -minCount 148 17 | ./fasttext skipgram -input data/ja.txt -output data/fasttext/ja -dim 300 -minCount 58 18 | ./fasttext skipgram -input data/jv.txt -output data/fasttext/jv -dim 100 -minCount 42 19 | ./fasttext skipgram -input data/ko.txt -output data/fasttext/ko -dim 200 -minCount 54 20 | ./fasttext skipgram -input data/ms.txt -output data/fasttext/ms -dim 100 -minCount 192 21 | ./fasttext skipgram -input data/no.txt -output data/fasttext/no -dim 300 -minCount 76 22 | ./fasttext skipgram -input data/nn.txt -output data/fasttext/nn -dim 100 -minCount 131 23 | ./fasttext skipgram -input data/pl.txt -output data/fasttext/pl -dim 300 -minCount 209 24 | ./fasttext skipgram -input data/pt.txt -output data/fasttext/pt -dim 300 -minCount 127 25 | ./fasttext skipgram -input data/ru.txt -output data/fasttext/ru -dim 300 -minCount 126 26 | ./fasttext skipgram -input data/es.txt -output data/fasttext/es -dim 300 -minCount 125 27 | ./fasttext skipgram -input data/sw.txt -output data/fasttext/sw -dim 100 -minCount 25 28 | ./fasttext skipgram -input data/sv.txt -output data/fasttext/sv -dim 300 -minCount 131 29 | ./fasttext skipgram -input data/tl.txt -output data/fasttext/tl -dim 100 -minCount 44 30 | ./fasttext skipgram -input data/th.txt -output data/fasttext/th -dim 300 -minCount 16 31 | ./fasttext skipgram -input data/tr.txt -output data/fasttext/tr -dim 200 -minCount 141 32 | ./fasttext skipgram -input data/vi.txt -output data/fasttext/vi -dim 100 -minCount 59 33 | -------------------------------------------------------------------------------- /MakeWordVectors/lcodes.txt: -------------------------------------------------------------------------------- 1 | lname lcode 2 | # Commented lines are not yet available. 3 | #Arabic ar 4 | #Bengali bn 5 | Catalan ca 6 | Chinese zh 7 | Danish da 8 | Dutch nl 9 | Esperanto eo 10 | Finnish fi 11 | French fr 12 | German de 13 | #Hindi hi 14 | Hungarian hu 15 | Indonesian id 16 | Italian it 17 | Japanese ja 18 | Javanese jv 19 | Korean ko 20 | Malay ms 21 | Norwegian no 22 | Norwegian Nynorsk nn 23 | Polish pl 24 | Portuguese pt 25 | Russian ru 26 | Spanish es 27 | Swahili sw 28 | Swedish sv 29 | Tagalog tl 30 | Thai th 31 | Turkish tr 32 | Vietnamese vi 33 | -------------------------------------------------------------------------------- /MakeWordVectors/make_wordvectors.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | #!/usr/bin/python2 3 | import nltk 4 | import os 5 | import codecs 6 | import argparse 7 | import numpy as np 8 | 9 | import sys 10 | reload(sys) 11 | 12 | d=sys.getdefaultencoding() 13 | if d != "utf-8": 14 | sys.setdefaultencoding('utf-8') 15 | 16 | # arguments setting 17 | parser = argparse.ArgumentParser() 18 | parser.add_argument('--lcode', help='ISO 639-1 code of target language. See `lcodes.txt`.') 19 | parser.add_argument('--vector_size', type=int, default=100, help='the size of a word vector') 20 | parser.add_argument('--window_size', type=int, default=5, help='the maximum distance between the current and predicted word within a sentence.') 21 | parser.add_argument('--vocab_size', type=int, default=10000, help='the maximum vocabulary size') 22 | parser.add_argument('--num_negative', type=int, default=5, help='the int for negative specifies how many “noise words” should be drawn') 23 | args = parser.parse_args() 24 | 25 | lcode = args.lcode 26 | vector_size = args.vector_size 27 | window_size = args.window_size 28 | vocab_size = args.vocab_size 29 | num_negative = args.num_negative 30 | 31 | def get_min_count(sents): 32 | ''' 33 | Args: 34 | sents: A list of lists. E.g., [["I", "am", "a", "boy", "."], ["You", "are", "a", "girl", "."]] 35 | 36 | Returns: 37 | min_count: A uint. Should be set as the parameter value of word2vec `min_count`. 38 | ''' 39 | global vocab_size 40 | from itertools import chain 41 | 42 | fdist = nltk.FreqDist(chain.from_iterable(sents)) 43 | min_count = fdist.most_common(vocab_size)[-1][1] # the count of the the top-kth word 44 | 45 | return min_count 46 | 47 | def make_wordvectors(): 48 | global lcode 49 | import gensim # In case you have difficulties installing gensim, you need to consider installing conda. 50 | import cPickle as pickle 51 | 52 | print "Making sentences as list..." 53 | sents = [] 54 | with codecs.open('data/corpus/all.txt', 'r', 'utf-8') as fin: 55 | while 1: 56 | line = fin.readline() 57 | if not line: break 58 | 59 | words = line.split() 60 | sents.append(words) 61 | 62 | print "Making word vectors..." 63 | min_count = get_min_count(sents) 64 | model = gensim.models.Word2Vec(sents, size=vector_size, min_count=min_count, 65 | negative=num_negative, 66 | window=window_size) 67 | 68 | 69 | # Some predefined functions that show content related information for given words 70 | #w = ["????"] 71 | #model.wv.most_similar(w) 72 | model.save('data/bangla_word2vec_model/BengWord2VecModel.bin') 73 | 74 | # Save to file 75 | with codecs.open('data/corpus/posts.tsv', 'w', 'utf-8') as fout: 76 | for i, word in enumerate(model.wv.index2word): 77 | fout.write(u"{}\t{}\t{}\n".format(str(i), word.encode('utf-8').decode('utf-8'), 78 | np.array_str(model[word]) 79 | )) 80 | if __name__ == "__main__": 81 | make_wordvectors() 82 | 83 | print("Done") 84 | -------------------------------------------------------------------------------- /MakeWordVectors/make_wordvectors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #### Set your hyper-parameters here #### 4 | ############## START ################### 5 | lcode="bn" # ISO 639-1 code of target language. See `lcodes.txt`. 6 | max_corpus_size=1000000000 # the maximum size of the corpus. Feel free to adjust it according to your computing power. 7 | vector_size=300 # the size of a word vector 8 | window_size=5 # the maximum distance between the current and predicted word within a sentence. 9 | vocab_size=2000000 # the maximum vocabulary size 10 | num_negative=5 # the int for negative specifies how many “noise words” should be drawn 11 | ############## END ##################### 12 | 13 | echo "Making wordvectors" 14 | python make_wordvectors.py --lcode=${lcode} --vector_size=${vector_size} --window_size=${window_size} --vocab_size=${vocab_size} --num_negative=${num_negative} 15 | 16 | -------------------------------------------------------------------------------- /Multichannel_CNN_LSTM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rezacsedu/Classification_Benchmarks_Benglai_NLP/298598fd11f67adcd3bd188ddb2c752751ab40c2/Multichannel_CNN_LSTM.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Classification Benchmarks for Under-resourced Bengali Language Based on Multichannel Convolutional-LSTM Network 2 | Code and supplementary materials for our paper titled "Classification Benchmarks for Under-resourced Bengali Language based on Multichannel Convolutional-LSTM Network", taccepted as a full paper at 7th IEEE International Conference on Data Science and Advanced Analytics (IEEE DSAA,2020). 3 | 4 | #### Methods 5 | Exponential growths of social media and micro-blogging sites not only provide platforms for empowering freedom of expressions and individual voices but also enables people to express anti-social behaviour like online harassment, cyberbullying, and hate speech. Numerous works have been proposed to utilize these data for social and anti-social behaviours analysis, document characterization, and sentiment analysis by predicting the contexts mostly for highly resourced languages such as English. However, there are languages that are under-resources, e.g., South Asian languages like Bengali, Tamil, Assamese, Telugu that lack of computational resources for the (NLP) tasks. 6 | 7 | In this paper, we provide several classification benchmarks for Bengali, an under-resourced language. We prepared three datasets of expressing hate, commonly used topics, and opinions for hate speech detection, document classification, and sentiment analysis, respectively. We built the largest Bengali word embedding models to date based on 250 million articles, which we call 'BengFastText'. We perform three different experiments, covering document classification, sentiment analysis, and hate speech detection. We incorporate word embeddings into a Multichannel Convolutional-LSTM (MConv-LSTM) network for predicting different types of hate speech, document classification, and sentiment analysis. Experiments demonstrate that 'BengFastText' can capture the semantics of words from respective contexts correctly. Evaluations against several baseline embedding models, e.g., Word2Vec and GloVe yield up to 92.30%, 82.25%, and 90.45% F1-scores in case of document classification, sentiment analysis, and hate speech detection, respectively during 5-fold cross-validation tests. 8 | 9 | #### Requirements 10 | * nltk >= 1.11.1 11 | * regex >= 2016.6.24 12 | * lxml >= 3.3.3 13 | * numpy >= 1.11.2 14 | 15 | #### References 16 | * Check [this](https://github.com/Kyubyong/wordvectors) to know how to prepare fastText model for other languages such as Korean, Japanese, French etc. 17 | 18 | #### Workflow of training the BengFastText model 19 | * STEP 1. Download [this](https://drive.google.com/open?id=199Z3KlTLvoApGixb5rwDIkbsmsl2n56F) raw Bengali texts in case you don't want to collect all the raw text. 20 | * STEP 2. Extract running texts to `data/` folder. 21 | * STEP 3. Run `build_corpus.py` using `python3 build_corpus.py` 22 | * STEP 4. Run `sudo ./make_wordvector.sh` to get the BengFastText word vectors but make sure it's already executable. 23 | 24 | #### Pre-trained BengFastText model 25 | | Language | UTF-8 | Vector Size | Corpus Size | Vocabulary Size | 26 | | --- |--- |--- |--- |--- | 27 | |[Bengali (BengFastText)](https://drive.google.com/open?id=1Q_45PQpRWQvZL2p8sIngmgg6Tr5YbKmH) \| [Bengali (f)](https://drive.google.com/open?id=1Q_45PQpRWQvZL2p8sIngmgg6Tr5YbKmH)|bn|300|250M |30059| negative sampling | 28 | 29 | #### Citation request 30 | If you use the code of this repository in your research, please consider citing the folowing papers: 31 | 32 | @inproceedings{karim2020BengaliNLP, 33 | title={Classification Benchmarks for Under-resourced Bengali Language based on Multichannel Convolutional-LSTM Network}, 34 | author={Md. Rezaul Karim, Bharathi Raja Chakravarti, John P. McCrae, and Michael Cochez}, 35 | conference={7th IEEE International Conference on Data Science and Advanced Analytics (IEEE DSAA,2020)}, 36 | year={2020} 37 | } 38 | 39 | #### Contributing 40 | For any questions, feel free to open an issue or contact at rezaul.karim@rwth-aachen.de 41 | -------------------------------------------------------------------------------- /SentimentAnalysis_Multichannel_CNN_LSTM/Multichannel_CNN_Bengali_Sentiment..py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[1]: 5 | 6 | 7 | import sklearn 8 | import numpy as np 9 | from glob import glob 10 | from sklearn import datasets 11 | from sklearn.model_selection import train_test_split 12 | from sklearn.feature_extraction.text import CountVectorizer 13 | from sklearn.feature_extraction.text import TfidfTransformer 14 | from sklearn.linear_model import SGDClassifier 15 | from sklearn.ensemble import RandomForestClassifier 16 | from sklearn import metrics 17 | from sklearn.pipeline import Pipeline 18 | 19 | import string 20 | from os import listdir 21 | from nltk.corpus import stopwords 22 | from nltk.corpus import stopwords 23 | from pickle import dump 24 | from string import punctuation 25 | 26 | 27 | # In[2]: 28 | 29 | 30 | categories = ['positive', 'negative'] 31 | 32 | 33 | # In[3]: 34 | 35 | 36 | # save a dataset to file 37 | def save_dataset(dataset, filename): 38 | dump(dataset, open(filename, 'wb')) 39 | print('Saved: %s' % filename) 40 | 41 | 42 | # In[4]: 43 | 44 | 45 | # load doc into memory 46 | def load_doc(filename): 47 | # open the file as read only 48 | file = open(filename, 'r', encoding='utf-8') 49 | # read all text 50 | text = file.read() 51 | # close the file 52 | file.close() 53 | return text 54 | 55 | 56 | # In[5]: 57 | 58 | 59 | import csv 60 | 61 | stop_words = 'stopwords_bn.txt' 62 | text_data = [] 63 | 64 | with open(stop_words, 'r', encoding='utf-8') as temp_output_file: 65 | reader = csv.reader(temp_output_file, delimiter='\n') 66 | for row in reader: 67 | text_data.append(row) 68 | 69 | stop_word_list = [x[0] for x in text_data] 70 | 71 | 72 | # In[6]: 73 | 74 | 75 | import string 76 | 77 | # turn a doc into clean tokens 78 | def clean_doc(doc): 79 | # split into tokens by white space 80 | tokens = doc.split() 81 | 82 | # remove punctuation from each token 83 | table = str.maketrans('', '', string.punctuation) 84 | tokens = [w.translate(table) for w in tokens] 85 | 86 | # remove remaining tokens that are not alphabetic 87 | tokens = [word for word in tokens if word.isalpha()] 88 | 89 | # filter out stop words 90 | stop_words = stop_word_list 91 | tokens = [w for w in tokens if not w in stop_words] 92 | 93 | # filter out short tokens 94 | tokens = [word for word in tokens if len(word) > 1] 95 | tokens = ' '.join(tokens) 96 | return tokens 97 | 98 | 99 | # In[7]: 100 | 101 | 102 | def load_data_and_labels(positive_data_file, negative_data_file): 103 | 104 | # load the positive doc 105 | pos_doc = load_doc(positive_data_file) 106 | 107 | # clean doc 108 | positive_examples = clean_doc(pos_doc) 109 | 110 | # load the negative doc 111 | neg_doc = load_doc(negative_data_file) 112 | negative_examples = clean_doc(neg_doc) 113 | 114 | # Split by words 115 | x_text = positive_examples + negative_examples 116 | 117 | # Generate labels 118 | positive_labels = [[0] for _ in positive_examples] 119 | negative_labels = [[1] for _ in negative_examples] 120 | trainy = [0 for _ in positive_examples] + [1 for _ in negative_examples] 121 | y = np.concatenate([positive_labels, negative_labels], 0) 122 | 123 | return [x_text, trainy] 124 | 125 | 126 | # In[8]: 127 | 128 | 129 | print("Loading data...") 130 | 131 | #Training dataset 132 | positive_data_file = 'C:/Users/admin-karim/Downloads/tmp/train/bangla.pos' 133 | negative_data_file = 'C:/Users/admin-karim/Downloads/tmp/train/bangla.neg' 134 | 135 | trainX, trainY = load_data_and_labels(positive_data_file, negative_data_file) 136 | 137 | #Testing dataset 138 | positive_data_file = 'C:/Users/admin-karim/Downloads/tmp/test/bangla.pos' 139 | negative_data_file = 'C:/Users/admin-karim/Downloads/tmp/test/bangla.neg' 140 | 141 | testX, testY = load_data_and_labels(positive_data_file, negative_data_file) 142 | 143 | 144 | # In[9]: 145 | 146 | 147 | save_dataset([trainX, trainY], 'train.pkl') 148 | save_dataset([testX, testY], 'test.pkl') 149 | 150 | 151 | # In[10]: 152 | 153 | 154 | from numpy import array 155 | from keras.preprocessing.text import Tokenizer 156 | from keras.preprocessing.sequence import pad_sequences 157 | from keras.utils.vis_utils import plot_model 158 | from keras.models import Model 159 | from keras.layers import Input 160 | from keras.layers import Dense 161 | from keras.layers import Flatten 162 | from keras.layers import Dropout 163 | from keras.layers import Embedding 164 | from keras.layers.convolutional import Conv1D 165 | from keras.layers import LSTM 166 | from keras.layers.convolutional import MaxPooling1D 167 | from keras.layers.merge import concatenate 168 | from pickle import load 169 | 170 | 171 | # In[11]: 172 | 173 | 174 | # load a clean dataset 175 | def load_dataset(filename): 176 | return load(open(filename, 'rb')) 177 | 178 | # fit a tokenizer 179 | def create_tokenizer(lines): 180 | tokenizer = Tokenizer() 181 | tokenizer.fit_on_texts(lines) 182 | return tokenizer 183 | 184 | # calculate the maximum document length 185 | def max_length(lines): 186 | return len(lines) 187 | 188 | # encode a list of lines 189 | def encode_text(tokenizer, lines, length): 190 | # integer encode 191 | encoded = tokenizer.texts_to_sequences(lines) 192 | # pad encoded sequences 193 | padded = pad_sequences(encoded, maxlen = length, padding = 'post') 194 | return padded 195 | 196 | 197 | # In[35]: 198 | 199 | 200 | import gensim 201 | from gensim.models import Word2Vec 202 | from gensim.utils import simple_preprocess 203 | NUM_WORDS=20000 204 | 205 | from gensim.models.keyedvectors import KeyedVectors 206 | 207 | word_vectors = Word2Vec.load('C:/Users/admin-karim/Desktop/BengWord2Vec/posts.bin') 208 | 209 | EMBEDDING_DIM=300 210 | vocabulary_size = len(tokenizer.word_index) + 1 211 | word_index = tokenizer.word_index 212 | embedding_matrix = np.zeros((vocabulary_size, EMBEDDING_DIM)) 213 | 214 | for word, i in word_index.items(): 215 | if i>=NUM_WORDS: 216 | continue 217 | try: 218 | embedding_vector = word_vectors[word] 219 | embedding_matrix[i] = embedding_vector 220 | except KeyError: 221 | embedding_matrix[i]=np.random.normal(0,np.sqrt(0.25),EMBEDDING_DIM) 222 | 223 | del(word_vectors) 224 | 225 | from keras.layers import Embedding 226 | embedding_layer = Embedding(vocabulary_size, EMBEDDING_DIM, weights=[embedding_matrix], trainable=True) 227 | 228 | 229 | # In[45]: 230 | 231 | 232 | # define the model 233 | def define_model(length, vocab_size): 234 | # channel 1 235 | input1 = Input(shape=(length,)) 236 | embedding_layer_1 = embedding_layer(input1) 237 | conv1 = Conv1D(filters=32, kernel_size=4, activation='relu')(embedding_layer_1) 238 | drop1 = Dropout(0.5)(conv1) 239 | pool1 = MaxPooling1D(pool_size=2)(drop1) 240 | flat1 = Flatten()(pool1) 241 | 242 | # channel 2 243 | input2 = Input(shape=(length,)) 244 | embedding_layer_2 = embedding_layer(input2) 245 | conv2 = Conv1D(filters=32, kernel_size=6, activation='relu')(embedding_layer_2) 246 | drop2 = Dropout(0.5)(conv2) 247 | pool2 = MaxPooling1D(pool_size=2)(drop2) 248 | flat2 = Flatten()(pool2) 249 | 250 | # channel 3 251 | input3 = Input(shape=(length,)) 252 | embedding_layer_3 = embedding_layer(input3) 253 | conv3 = Conv1D(filters=32, kernel_size=8, activation='relu')(embedding_layer_3) 254 | drop3 = Dropout(0.5)(conv3) 255 | pool3 = MaxPooling1D(pool_size=2)(drop3) 256 | flat3 = Flatten()(pool3) 257 | 258 | # merge 259 | CNN_layer = concatenate([flat1, flat2, flat3]) 260 | 261 | # LSTM 262 | x = embedding_layer(input3) 263 | LSTM_layer = LSTM(128)(x) 264 | 265 | CNN_LSTM_layer = concatenate([LSTM_layer, CNN_layer]) 266 | 267 | # interpretation 268 | dense1 = Dense(10, activation='relu')(CNN_LSTM_layer) 269 | outputs = Dense(1, activation='sigmoid')(dense1) 270 | model = Model(inputs=[input1, input2, input3], outputs=outputs) 271 | 272 | # compile 273 | model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 274 | 275 | # summarize 276 | print(model.summary()) 277 | 278 | return model 279 | 280 | 281 | # In[46]: 282 | 283 | 284 | # load training dataset 285 | trainLines, trainLabels = load_dataset('train.pkl') 286 | 287 | # create tokenizer 288 | tokenizer = create_tokenizer(trainLines) 289 | 290 | # calculate max document length 291 | trainLength = 300 292 | 293 | # calculate vocabulary size 294 | vocab_size = len(tokenizer.word_index) + 1 295 | print('Max document length: %d' % trainLength) 296 | print('Vocabulary size: %d' % vocab_size) 297 | 298 | # encode data 299 | trainX = encode_text(tokenizer, trainLines, trainLength) 300 | print(trainX.shape) 301 | 302 | # define model 303 | model = define_model(trainLength, vocab_size) 304 | 305 | # fit model 306 | model.fit([trainX,trainX,trainX], array(trainLabels), epochs=1, batch_size=128) 307 | 308 | # save the model 309 | model.save('model.h5') 310 | 311 | 312 | # In[47]: 313 | 314 | 315 | import os 316 | os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/' 317 | 318 | plot_model(model, show_shapes=True, to_file='multichannel.png') 319 | 320 | 321 | # In[48]: 322 | 323 | 324 | from pickle import load 325 | from numpy import array 326 | from keras.preprocessing.text import Tokenizer 327 | from keras.preprocessing.sequence import pad_sequences 328 | from keras.models import load_model 329 | 330 | testLines, testLabels = load_dataset('test.pkl') 331 | 332 | # create tokenizer 333 | tokenizer = create_tokenizer(testLines) 334 | 335 | # calculate max document length 336 | length = trainLength 337 | 338 | # calculate vocabulary size 339 | vocab_size = len(tokenizer.word_index) + 1 340 | print('Max document length: %d' % length) 341 | print('Vocabulary size: %d' % vocab_size) 342 | 343 | # encode data 344 | testX = encode_text(tokenizer, testLines, length) 345 | print(testX.shape) 346 | 347 | # load the model 348 | model = load_model('model.h5') 349 | 350 | # evaluate model on test dataset dataset 351 | loss, acc = model.evaluate([testX,testX,testX],array(testLabels), verbose=0) 352 | print('Test accuracy: %f' % (acc*100)) 353 | 354 | -------------------------------------------------------------------------------- /SentimentAnalysis_Multichannel_CNN_LSTM/Multichannel_CNN_Bengali_Sentiment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import sklearn\n", 10 | "import numpy as np\n", 11 | "from glob import glob\n", 12 | "from sklearn import datasets\n", 13 | "from sklearn.model_selection import train_test_split\n", 14 | "from sklearn.feature_extraction.text import CountVectorizer\n", 15 | "from sklearn.feature_extraction.text import TfidfTransformer\n", 16 | "from sklearn.linear_model import SGDClassifier\n", 17 | "from sklearn.ensemble import RandomForestClassifier\n", 18 | "from sklearn import metrics\n", 19 | "from sklearn.pipeline import Pipeline \n", 20 | "\n", 21 | "import string\n", 22 | "from os import listdir\n", 23 | "from nltk.corpus import stopwords\n", 24 | "from nltk.corpus import stopwords\n", 25 | "from pickle import dump\n", 26 | "from string import punctuation" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 2, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "categories = ['positive', 'negative']" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 3, 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [ 44 | "# save a dataset to file\n", 45 | "def save_dataset(dataset, filename):\n", 46 | "\tdump(dataset, open(filename, 'wb'))\n", 47 | "\tprint('Saved: %s' % filename)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 4, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "# load doc into memory\n", 57 | "def load_doc(filename):\n", 58 | "\t# open the file as read only\n", 59 | "\tfile = open(filename, 'r', encoding='utf-8')\n", 60 | "\t# read all text\n", 61 | "\ttext = file.read()\n", 62 | "\t# close the file\n", 63 | "\tfile.close()\n", 64 | "\treturn text" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 5, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "import csv\n", 74 | "\n", 75 | "stop_words = 'stopwords_bn.txt'\n", 76 | "text_data = []\n", 77 | "\n", 78 | "with open(stop_words, 'r', encoding='utf-8') as temp_output_file:\n", 79 | " reader = csv.reader(temp_output_file, delimiter='\\n')\n", 80 | " for row in reader:\n", 81 | " text_data.append(row)\n", 82 | "\n", 83 | "stop_word_list = [x[0] for x in text_data]" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 6, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "import string \n", 93 | "\n", 94 | "# turn a doc into clean tokens\n", 95 | "def clean_doc(doc):\n", 96 | "\t# split into tokens by white space\n", 97 | "\ttokens = doc.split()\n", 98 | " \n", 99 | "\t# remove punctuation from each token\n", 100 | "\ttable = str.maketrans('', '', string.punctuation)\n", 101 | "\ttokens = [w.translate(table) for w in tokens]\n", 102 | " \n", 103 | "\t# remove remaining tokens that are not alphabetic\n", 104 | "\ttokens = [word for word in tokens if word.isalpha()]\n", 105 | " \n", 106 | "\t# filter out stop words\n", 107 | "\tstop_words = stop_word_list\n", 108 | "\ttokens = [w for w in tokens if not w in stop_words]\n", 109 | " \n", 110 | "\t# filter out short tokens\n", 111 | "\ttokens = [word for word in tokens if len(word) > 1]\n", 112 | "\ttokens = ' '.join(tokens)\n", 113 | "\treturn tokens" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 7, 119 | "metadata": {}, 120 | "outputs": [], 121 | "source": [ 122 | "def load_data_and_labels(positive_data_file, negative_data_file):\n", 123 | " \n", 124 | " # load the positive doc\n", 125 | " pos_doc = load_doc(positive_data_file)\n", 126 | " \n", 127 | " # clean doc\n", 128 | " positive_examples = clean_doc(pos_doc)\n", 129 | " \n", 130 | " # load the negative doc\n", 131 | " neg_doc = load_doc(negative_data_file)\n", 132 | " negative_examples = clean_doc(neg_doc)\n", 133 | " \n", 134 | " # Split by words\n", 135 | " x_text = positive_examples + negative_examples\n", 136 | " \n", 137 | " # Generate labels\n", 138 | " positive_labels = [[0] for _ in positive_examples]\n", 139 | " negative_labels = [[1] for _ in negative_examples]\n", 140 | " trainy = [0 for _ in positive_examples] + [1 for _ in negative_examples]\n", 141 | " y = np.concatenate([positive_labels, negative_labels], 0)\n", 142 | " \n", 143 | " return [x_text, trainy]" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 8, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "name": "stdout", 153 | "output_type": "stream", 154 | "text": [ 155 | "Loading data...\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "print(\"Loading data...\")\n", 161 | "\n", 162 | "#Training dataset\n", 163 | "positive_data_file = 'C:/Users/admin-karim/Downloads/tmp/train/bangla.pos'\n", 164 | "negative_data_file = 'C:/Users/admin-karim/Downloads/tmp/train/bangla.neg'\n", 165 | "\n", 166 | "trainX, trainY = load_data_and_labels(positive_data_file, negative_data_file)\n", 167 | "\n", 168 | "#Testing dataset\n", 169 | "positive_data_file = 'C:/Users/admin-karim/Downloads/tmp/test/bangla.pos'\n", 170 | "negative_data_file = 'C:/Users/admin-karim/Downloads/tmp/test/bangla.neg'\n", 171 | "\n", 172 | "testX, testY = load_data_and_labels(positive_data_file, negative_data_file)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 9, 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "Saved: train.pkl\n", 185 | "Saved: test.pkl\n" 186 | ] 187 | } 188 | ], 189 | "source": [ 190 | "save_dataset([trainX, trainY], 'train.pkl')\n", 191 | "save_dataset([testX, testY], 'test.pkl')" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": 10, 197 | "metadata": {}, 198 | "outputs": [ 199 | { 200 | "name": "stderr", 201 | "output_type": "stream", 202 | "text": [ 203 | "Using TensorFlow backend.\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "from numpy import array\n", 209 | "from keras.preprocessing.text import Tokenizer\n", 210 | "from keras.preprocessing.sequence import pad_sequences\n", 211 | "from keras.utils.vis_utils import plot_model\n", 212 | "from keras.models import Model\n", 213 | "from keras.layers import Input\n", 214 | "from keras.layers import Dense\n", 215 | "from keras.layers import Flatten\n", 216 | "from keras.layers import Dropout\n", 217 | "from keras.layers import Embedding\n", 218 | "from keras.layers.convolutional import Conv1D\n", 219 | "from keras.layers import LSTM\n", 220 | "from keras.layers.convolutional import MaxPooling1D\n", 221 | "from keras.layers.merge import concatenate\n", 222 | "from pickle import load" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 11, 228 | "metadata": {}, 229 | "outputs": [], 230 | "source": [ 231 | "# load a clean dataset\n", 232 | "def load_dataset(filename):\n", 233 | "\treturn load(open(filename, 'rb'))\n", 234 | " \n", 235 | "# fit a tokenizer\n", 236 | "def create_tokenizer(lines):\n", 237 | "\ttokenizer = Tokenizer()\n", 238 | "\ttokenizer.fit_on_texts(lines)\n", 239 | "\treturn tokenizer\n", 240 | " \n", 241 | "# calculate the maximum document length\n", 242 | "def max_length(lines):\n", 243 | "\treturn len(lines)\n", 244 | " \n", 245 | "# encode a list of lines\n", 246 | "def encode_text(tokenizer, lines, length):\n", 247 | "\t# integer encode\n", 248 | "\tencoded = tokenizer.texts_to_sequences(lines)\n", 249 | "\t# pad encoded sequences\n", 250 | "\tpadded = pad_sequences(encoded, maxlen = length, padding = 'post')\n", 251 | "\treturn padded" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 35, 257 | "metadata": {}, 258 | "outputs": [ 259 | { 260 | "name": "stderr", 261 | "output_type": "stream", 262 | "text": [ 263 | "c:\\users\\admin-karim\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\ipykernel_launcher.py:19: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).\n" 264 | ] 265 | } 266 | ], 267 | "source": [ 268 | "import gensim\n", 269 | "from gensim.models import Word2Vec\n", 270 | "from gensim.utils import simple_preprocess\n", 271 | "NUM_WORDS=20000\n", 272 | "\n", 273 | "from gensim.models.keyedvectors import KeyedVectors\n", 274 | "\n", 275 | "word_vectors = Word2Vec.load('C:/Users/admin-karim/Desktop/BengWord2Vec/posts.bin')\n", 276 | "\n", 277 | "EMBEDDING_DIM=300\n", 278 | "vocabulary_size = len(tokenizer.word_index) + 1\n", 279 | "word_index = tokenizer.word_index\n", 280 | "embedding_matrix = np.zeros((vocabulary_size, EMBEDDING_DIM))\n", 281 | "\n", 282 | "for word, i in word_index.items():\n", 283 | " if i>=NUM_WORDS:\n", 284 | " continue\n", 285 | " try:\n", 286 | " embedding_vector = word_vectors[word]\n", 287 | " embedding_matrix[i] = embedding_vector\n", 288 | " except KeyError:\n", 289 | " embedding_matrix[i]=np.random.normal(0,np.sqrt(0.25),EMBEDDING_DIM)\n", 290 | "\n", 291 | "del(word_vectors)\n", 292 | "\n", 293 | "from keras.layers import Embedding\n", 294 | "embedding_layer = Embedding(vocabulary_size, EMBEDDING_DIM, weights=[embedding_matrix], trainable=True)" 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "execution_count": 45, 300 | "metadata": {}, 301 | "outputs": [], 302 | "source": [ 303 | "# define the model\n", 304 | "def define_model(length, vocab_size):\n", 305 | "\t# channel 1\n", 306 | "\tinput1 = Input(shape=(length,))\n", 307 | "\tembedding_layer_1 = embedding_layer(input1)\n", 308 | "\tconv1 = Conv1D(filters=32, kernel_size=4, activation='relu')(embedding_layer_1)\n", 309 | "\tdrop1 = Dropout(0.5)(conv1)\n", 310 | "\tpool1 = MaxPooling1D(pool_size=2)(drop1)\n", 311 | "\tflat1 = Flatten()(pool1)\n", 312 | " \n", 313 | "\t# channel 2\n", 314 | "\tinput2 = Input(shape=(length,))\n", 315 | "\tembedding_layer_2 = embedding_layer(input2)\n", 316 | "\tconv2 = Conv1D(filters=32, kernel_size=6, activation='relu')(embedding_layer_2)\n", 317 | "\tdrop2 = Dropout(0.5)(conv2)\n", 318 | "\tpool2 = MaxPooling1D(pool_size=2)(drop2)\n", 319 | "\tflat2 = Flatten()(pool2)\n", 320 | " \n", 321 | "\t# channel 3\n", 322 | "\tinput3 = Input(shape=(length,))\n", 323 | "\tembedding_layer_3 = embedding_layer(input3)\n", 324 | "\tconv3 = Conv1D(filters=32, kernel_size=8, activation='relu')(embedding_layer_3)\n", 325 | "\tdrop3 = Dropout(0.5)(conv3)\n", 326 | "\tpool3 = MaxPooling1D(pool_size=2)(drop3)\n", 327 | "\tflat3 = Flatten()(pool3)\n", 328 | " \n", 329 | "\t# merge\n", 330 | "\tCNN_layer = concatenate([flat1, flat2, flat3])\n", 331 | " \n", 332 | "\t# LSTM\n", 333 | "\tx = embedding_layer(input3)\n", 334 | "\tLSTM_layer = LSTM(128)(x)\n", 335 | "\n", 336 | "\tCNN_LSTM_layer = concatenate([LSTM_layer, CNN_layer])\n", 337 | " \n", 338 | "\t# interpretation\n", 339 | "\tdense1 = Dense(10, activation='relu')(CNN_LSTM_layer)\n", 340 | "\toutputs = Dense(1, activation='sigmoid')(dense1)\n", 341 | "\tmodel = Model(inputs=[input1, input2, input3], outputs=outputs)\n", 342 | " \n", 343 | "\t# compile\n", 344 | "\tmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 345 | " \n", 346 | "\t# summarize\n", 347 | "\tprint(model.summary())\n", 348 | " \n", 349 | "\treturn model" 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "execution_count": 46, 355 | "metadata": {}, 356 | "outputs": [ 357 | { 358 | "name": "stdout", 359 | "output_type": "stream", 360 | "text": [ 361 | "Max document length: 300\n", 362 | "Vocabulary size: 73\n", 363 | "(12486, 300)\n", 364 | "__________________________________________________________________________________________________\n", 365 | "Layer (type) Output Shape Param # Connected to \n", 366 | "==================================================================================================\n", 367 | "input_29 (InputLayer) (None, 300) 0 \n", 368 | "__________________________________________________________________________________________________\n", 369 | "input_27 (InputLayer) (None, 300) 0 \n", 370 | "__________________________________________________________________________________________________\n", 371 | "input_28 (InputLayer) (None, 300) 0 \n", 372 | "__________________________________________________________________________________________________\n", 373 | "embedding_25 (Embedding) (None, 300, 300) 21900 input_27[0][0] \n", 374 | " input_28[0][0] \n", 375 | " input_29[0][0] \n", 376 | " input_29[0][0] \n", 377 | "__________________________________________________________________________________________________\n", 378 | "conv1d_27 (Conv1D) (None, 297, 32) 38432 embedding_25[6][0] \n", 379 | "__________________________________________________________________________________________________\n", 380 | "conv1d_28 (Conv1D) (None, 295, 32) 57632 embedding_25[7][0] \n", 381 | "__________________________________________________________________________________________________\n", 382 | "conv1d_29 (Conv1D) (None, 293, 32) 76832 embedding_25[8][0] \n", 383 | "__________________________________________________________________________________________________\n", 384 | "dropout_25 (Dropout) (None, 297, 32) 0 conv1d_27[0][0] \n", 385 | "__________________________________________________________________________________________________\n", 386 | "dropout_26 (Dropout) (None, 295, 32) 0 conv1d_28[0][0] \n", 387 | "__________________________________________________________________________________________________\n", 388 | "dropout_27 (Dropout) (None, 293, 32) 0 conv1d_29[0][0] \n", 389 | "__________________________________________________________________________________________________\n", 390 | "max_pooling1d_25 (MaxPooling1D) (None, 148, 32) 0 dropout_25[0][0] \n", 391 | "__________________________________________________________________________________________________\n", 392 | "max_pooling1d_26 (MaxPooling1D) (None, 147, 32) 0 dropout_26[0][0] \n", 393 | "__________________________________________________________________________________________________\n", 394 | "max_pooling1d_27 (MaxPooling1D) (None, 146, 32) 0 dropout_27[0][0] \n", 395 | "__________________________________________________________________________________________________\n", 396 | "flatten_25 (Flatten) (None, 4736) 0 max_pooling1d_25[0][0] \n", 397 | "__________________________________________________________________________________________________\n", 398 | "flatten_26 (Flatten) (None, 4704) 0 max_pooling1d_26[0][0] \n", 399 | "__________________________________________________________________________________________________\n", 400 | "flatten_27 (Flatten) (None, 4672) 0 max_pooling1d_27[0][0] \n", 401 | "__________________________________________________________________________________________________\n", 402 | "lstm_9 (LSTM) (None, 128) 219648 embedding_25[9][0] \n", 403 | "__________________________________________________________________________________________________\n", 404 | "concatenate_16 (Concatenate) (None, 14112) 0 flatten_25[0][0] \n", 405 | " flatten_26[0][0] \n", 406 | " flatten_27[0][0] \n", 407 | "__________________________________________________________________________________________________\n", 408 | "concatenate_17 (Concatenate) (None, 14240) 0 lstm_9[0][0] \n", 409 | " concatenate_16[0][0] \n", 410 | "__________________________________________________________________________________________________\n", 411 | "dense_15 (Dense) (None, 10) 142410 concatenate_17[0][0] \n", 412 | "__________________________________________________________________________________________________\n", 413 | "dense_16 (Dense) (None, 1) 11 dense_15[0][0] \n", 414 | "==================================================================================================\n", 415 | "Total params: 556,865\n", 416 | "Trainable params: 556,865\n", 417 | "Non-trainable params: 0\n", 418 | "__________________________________________________________________________________________________\n", 419 | "None\n", 420 | "Epoch 1/1\n", 421 | "12486/12486 [==============================] - 373s 30ms/step - loss: 0.6847 - acc: 0.5585\n" 422 | ] 423 | } 424 | ], 425 | "source": [ 426 | "# load training dataset\n", 427 | "trainLines, trainLabels = load_dataset('train.pkl')\n", 428 | "\n", 429 | "# create tokenizer\n", 430 | "tokenizer = create_tokenizer(trainLines)\n", 431 | "\n", 432 | "# calculate max document length\n", 433 | "trainLength = 300\n", 434 | "\n", 435 | "# calculate vocabulary size\n", 436 | "vocab_size = len(tokenizer.word_index) + 1\n", 437 | "print('Max document length: %d' % trainLength)\n", 438 | "print('Vocabulary size: %d' % vocab_size)\n", 439 | "\n", 440 | "# encode data\n", 441 | "trainX = encode_text(tokenizer, trainLines, trainLength)\n", 442 | "print(trainX.shape)\n", 443 | " \n", 444 | "# define model\n", 445 | "model = define_model(trainLength, vocab_size)\n", 446 | "\n", 447 | "# fit model\n", 448 | "model.fit([trainX,trainX,trainX], array(trainLabels), epochs=1, batch_size=128)\n", 449 | "\n", 450 | "# save the model\n", 451 | "model.save('model.h5')" 452 | ] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "execution_count": 47, 457 | "metadata": {}, 458 | "outputs": [], 459 | "source": [ 460 | "import os\n", 461 | "os.environ[\"PATH\"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'\n", 462 | "\n", 463 | "plot_model(model, show_shapes=True, to_file='multichannel.png')" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 48, 469 | "metadata": {}, 470 | "outputs": [ 471 | { 472 | "name": "stdout", 473 | "output_type": "stream", 474 | "text": [ 475 | "Max document length: 300\n", 476 | "Vocabulary size: 62\n", 477 | "(2703, 300)\n", 478 | "Test accuracy: 50.351461\n" 479 | ] 480 | } 481 | ], 482 | "source": [ 483 | "from pickle import load\n", 484 | "from numpy import array\n", 485 | "from keras.preprocessing.text import Tokenizer\n", 486 | "from keras.preprocessing.sequence import pad_sequences\n", 487 | "from keras.models import load_model\n", 488 | " \n", 489 | "testLines, testLabels = load_dataset('test.pkl')\n", 490 | " \n", 491 | "# create tokenizer\n", 492 | "tokenizer = create_tokenizer(testLines)\n", 493 | "\n", 494 | "# calculate max document length\n", 495 | "length = trainLength\n", 496 | "\n", 497 | "# calculate vocabulary size\n", 498 | "vocab_size = len(tokenizer.word_index) + 1\n", 499 | "print('Max document length: %d' % length)\n", 500 | "print('Vocabulary size: %d' % vocab_size)\n", 501 | "\n", 502 | "# encode data\n", 503 | "testX = encode_text(tokenizer, testLines, length)\n", 504 | "print(testX.shape)\n", 505 | "\n", 506 | "# load the model\n", 507 | "model = load_model('model.h5') \n", 508 | "\n", 509 | "# evaluate model on test dataset dataset\n", 510 | "loss, acc = model.evaluate([testX,testX,testX],array(testLabels), verbose=0)\n", 511 | "print('Test accuracy: %f' % (acc*100))" 512 | ] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "execution_count": null, 517 | "metadata": {}, 518 | "outputs": [], 519 | "source": [] 520 | } 521 | ], 522 | "metadata": { 523 | "kernelspec": { 524 | "display_name": "Python 3", 525 | "language": "python", 526 | "name": "python3" 527 | }, 528 | "language_info": { 529 | "codemirror_mode": { 530 | "name": "ipython", 531 | "version": 3 532 | }, 533 | "file_extension": ".py", 534 | "mimetype": "text/x-python", 535 | "name": "python", 536 | "nbconvert_exporter": "python", 537 | "pygments_lexer": "ipython3", 538 | "version": "3.5.2" 539 | } 540 | }, 541 | "nbformat": 4, 542 | "nbformat_minor": 2 543 | } 544 | -------------------------------------------------------------------------------- /SentimentAnalysis_Multichannel_CNN_LSTM/stopwords_bn.txt: -------------------------------------------------------------------------------- 1 | অতএব 2 | অথচ 3 | অথবা 4 | অনুযায়ী 5 | অনেক 6 | অনেকে 7 | অনেকেই 8 | অন্তত 9 | অন্য 10 | অবধি 11 | অবশ্য 12 | অর্থাত 13 | আই 14 | আগামী 15 | আগে 16 | আগেই 17 | আছে 18 | আজ 19 | আদ্যভাগে 20 | আপনার 21 | আপনি 22 | আবার 23 | আমরা 24 | আমাকে 25 | আমাদের 26 | আমার 27 | আমি 28 | আর 29 | আরও 30 | ই 31 | ইত্যাদি 32 | ইহা 33 | উচিত 34 | উত্তর 35 | উনি 36 | উপর 37 | উপরে 38 | এ 39 | এঁদের 40 | এঁরা 41 | এই 42 | একই 43 | একটি 44 | একবার 45 | একে 46 | এক্ 47 | এখন 48 | এখনও 49 | এখানে 50 | এখানেই 51 | এটা 52 | এটাই 53 | এটি 54 | এত 55 | এতটাই 56 | এতে 57 | এদের 58 | এব 59 | এবং 60 | এবার 61 | এমন 62 | এমনকী 63 | এমনি 64 | এর 65 | এরা 66 | এল 67 | এস 68 | এসে 69 | ঐ 70 | ও 71 | ওঁদের 72 | ওঁর 73 | ওঁরা 74 | ওই 75 | ওকে 76 | ওখানে 77 | ওদের 78 | ওর 79 | ওরা 80 | কখনও 81 | কত 82 | কবে 83 | কমনে 84 | কয়েক 85 | কয়েকটি 86 | করছে 87 | করছেন 88 | করতে 89 | করবে 90 | করবেন 91 | করলে 92 | করলেন 93 | করা 94 | করাই 95 | করায় 96 | করার 97 | করি 98 | করিতে 99 | করিয়া 100 | করিয়ে 101 | করে 102 | করেই 103 | করেছিলেন 104 | করেছে 105 | করেছেন 106 | করেন 107 | কাউকে 108 | কাছ 109 | কাছে 110 | কাজ 111 | কাজে 112 | কারও 113 | কারণ 114 | কি 115 | কিংবা 116 | কিছু 117 | কিছুই 118 | কিন্তু 119 | কী 120 | কে 121 | কেউ 122 | কেউই 123 | কেখা 124 | কেন 125 | কোটি 126 | কোন 127 | কোনও 128 | কোনো 129 | ক্ষেত্রে 130 | কয়েক 131 | খুব 132 | গিয়ে 133 | গিয়েছে 134 | গিয়ে 135 | গুলি 136 | গেছে 137 | গেল 138 | গেলে 139 | গোটা 140 | চলে 141 | চান 142 | চায় 143 | চার 144 | চালু 145 | চেয়ে 146 | চেষ্টা 147 | ছাড়া 148 | ছাড়াও 149 | ছিল 150 | ছিলেন 151 | জন 152 | জনকে 153 | জনের 154 | জন্য 155 | জন্যওজে 156 | জানতে 157 | জানা 158 | জানানো 159 | জানায় 160 | জানিয়ে 161 | জানিয়েছে 162 | জে 163 | জ্নজন 164 | টি 165 | ঠিক 166 | তখন 167 | তত 168 | তথা 169 | তবু 170 | তবে 171 | তা 172 | তাঁকে 173 | তাঁদের 174 | তাঁর 175 | তাঁরা 176 | তাঁাহারা 177 | তাই 178 | তাও 179 | তাকে 180 | তাতে 181 | তাদের 182 | তার 183 | তারপর 184 | তারা 185 | তারৈ 186 | তাহলে 187 | তাহা 188 | তাহাতে 189 | তাহার 190 | তিনঐ 191 | তিনি 192 | তিনিও 193 | তুমি 194 | তুলে 195 | তেমন 196 | তো 197 | তোমার 198 | থাকবে 199 | থাকবেন 200 | থাকা 201 | থাকায় 202 | থাকে 203 | থাকেন 204 | থেকে 205 | থেকেই 206 | থেকেও 207 | দিকে 208 | দিতে 209 | দিন 210 | দিয়ে 211 | দিয়েছে 212 | দিয়েছেন 213 | দিলেন 214 | দু 215 | দুই 216 | দুটি 217 | দুটো 218 | দেওয়া 219 | দেওয়ার 220 | দেওয়া 221 | দেখতে 222 | দেখা 223 | দেখে 224 | দেন 225 | দেয় 226 | দ্বারা 227 | ধরা 228 | ধরে 229 | ধামার 230 | নতুন 231 | নয় 232 | না 233 | নাই 234 | নাকি 235 | নাগাদ 236 | নানা 237 | নিজে 238 | নিজেই 239 | নিজেদের 240 | নিজের 241 | নিতে 242 | নিয়ে 243 | নিয়ে 244 | নেই 245 | নেওয়া 246 | নেওয়ার 247 | নেওয়া 248 | নয় 249 | পক্ষে 250 | পর 251 | পরে 252 | পরেই 253 | পরেও 254 | পর্যন্ত 255 | পাওয়া 256 | পাচ 257 | পারি 258 | পারে 259 | পারেন 260 | পি 261 | পেয়ে 262 | পেয়্র্ 263 | প্রতি 264 | প্রথম 265 | প্রভৃতি 266 | প্রযন্ত 267 | প্রাথমিক 268 | প্রায় 269 | প্রায় 270 | ফলে 271 | ফিরে 272 | ফের 273 | বক্তব্য 274 | বদলে 275 | বন 276 | বরং 277 | বলতে 278 | বলল 279 | বললেন 280 | বলা 281 | বলে 282 | বলেছেন 283 | বলেন 284 | বসে 285 | বহু 286 | বা 287 | বাদে 288 | বার 289 | বি 290 | বিনা 291 | বিভিন্ন 292 | বিশেষ 293 | বিষয়টি 294 | বেশ 295 | বেশি 296 | ব্যবহার 297 | ব্যাপারে 298 | ভাবে 299 | ভাবেই 300 | মতো 301 | মতোই 302 | মধ্যভাগে 303 | মধ্যে 304 | মধ্যেই 305 | মধ্যেও 306 | মনে 307 | মাত্র 308 | মাধ্যমে 309 | মোট 310 | মোটেই 311 | যখন 312 | যত 313 | যতটা 314 | যথেষ্ট 315 | যদি 316 | যদিও 317 | যা 318 | যাঁর 319 | যাঁরা 320 | যাওয়া 321 | যাওয়ার 322 | যাওয়া 323 | যাকে 324 | যাচ্ছে 325 | যাতে 326 | যাদের 327 | যান 328 | যাবে 329 | যায় 330 | যার 331 | যারা 332 | যিনি 333 | যে 334 | যেখানে 335 | যেতে 336 | যেন 337 | যেমন 338 | র 339 | রকম 340 | রয়েছে 341 | রাখা 342 | রেখে 343 | লক্ষ 344 | শুধু 345 | শুরু 346 | সঙ্গে 347 | সঙ্গেও 348 | সব 349 | সবার 350 | সমস্ত 351 | সম্প্রতি 352 | সহ 353 | সহিত 354 | সাধারণ 355 | সামনে 356 | সি 357 | সুতরাং 358 | সে 359 | সেই 360 | সেখান 361 | সেখানে 362 | সেটা 363 | সেটাই 364 | সেটাও 365 | সেটি 366 | স্পষ্ট 367 | স্বয়ং 368 | হইতে 369 | হইবে 370 | হইয়া 371 | হওয়া 372 | হওয়ায় 373 | হওয়ার 374 | হচ্ছে 375 | হত 376 | হতে 377 | হতেই 378 | হন 379 | হবে 380 | হবেন 381 | হয় 382 | হয়তো 383 | হয়নি 384 | হয়ে 385 | হয়েই 386 | হয়েছিল 387 | হয়েছে 388 | হয়েছেন 389 | হল 390 | হলে 391 | হলেই 392 | হলেও 393 | হলো 394 | হাজার 395 | হিসাবে 396 | হৈলে 397 | হোক 398 | হয় -------------------------------------------------------------------------------- /SentimentAnalysis_Multichannel_CNN_LSTM/tmp/test/bangla.neg: -------------------------------------------------------------------------------- 1 | এই বাঁটু প্লেয়ারটা আর কত বয়স হলে ম্যাচুয়র হবে কে জানে! 2 | একদম ঠিক কথা ভাই। ১০-১২ বছর ধরে খেলে এদের এখনো পেস বোলিং দেখলে বাতে ব্যাথায় ধরে, 3 | একদম ঠিক কথা ভাই। ১০-১২ বছর ধরে খেলে এদের এখনো পেস বোলিং দেখলে বাতে ব্যাথায় ধরে, 4 | জনাব নিলয়, নাফিস ও সায়েম রহমানকে বাংলাদেশের ২য় ইনিংসে নামিয়ে দেয়ার জন্য আহবান জানাচ্ছি।। 5 | দুজপ্নে স্যার ডন ব্যাডম্যান,টেন্ডুলকার ও সাঙ্গাকারার উত্তরসুরী 6 | আরে ভাই মানলাম ওরা সবাই আবাল।তুমি যদি এতই বাল হও গিয়ে সেনচুরি করে আসতা 7 | একম্যাচে খারাপ খেললেই...এজন্যই বাঙালি হাসির পাত্র 8 |  আইছে আরেক পীরবাবা মাছরাফির আবাল মুরিদ। 9 | ৭ টা ইনজুরী থেকে বারবার ফিরে না হয় বাদ ই দিলাম। 10 | গতিদানব হাসতে হাসতে পেট ব্যাথা হয়ে গেলো। 11 | ভাই তবে মাঠে কিছু করতে না পারলেও জুয়ার আসরে সে হ্যাট্রিক করবেই!!হাহাহা 12 | সুজন ভাউ ১ম টেস্টের পরে বলেছিলেন উনাদের মনে হয়েছে রাজ্জাকের চেয়ে সাঞ্জামুল ভালো হবে। বাকীটা ইতিহাস 13 | এলাহিকান্ড তো ঘটিয়েছেন তামিম, ইমরুল, মুশি আর মিমি। 14 | মিমি'র রান আউট দেখে মনে হইছে সকালের ঘুমের অলসতা এখনো কাটেনি তার। 15 | দেশে এহন নানা দরণে #খেলা............খেলা কোনডা রেখে কোনডা দেখব এইডা ভাবচ্ছি..... 16 | ভাল করেছে বলে এত ভাল ভাল কথা,,যদি উইকেট না পেত এতক্ষনে তার চৌদ্দ গোষ্টি উদ্ধার করে দিত 17 | এই হল বাংলার মানুষের বড় দোষ 18 | পুরানা চাল ভাতে বাড়ে।কথা যৌক্তিক 19 | রাজ্জাক কাণ্ড বাদ দিয়া, ব্যাটিং কাণ্ড নিয়া বলেন, বাল 20 |  হলে কি হবে বাংলাদেশের ব্যাটিং তো হারার আভাস দিচ্ছে 21 | রংগনা হেরাত একাই শেষ করে ফেলবে স্পিন করলে, পারলে পেইস করো.. 22 |  হেতিরে কেউ ধরেন ভাই 23 | তাইলে খেলারই দরকার নাই 24 | যতবলে ততনা আমরাও পারি লংকাকে হারাতে। 25 | ভাই ইন্ডিয়া রাখেন অাপনার ছেলের নাম তয় অামরা কইতে পারুম, ভারতের বাপ মুশফিক! 26 | সত্যি বলতে আফগানিস্তান ক্রিকেট আমাদের ক্রিকেট এর চেয়েও অনেক দ্রুত এগিয়ে যাচ্ছে। 27 | কেনিয়াওও অনেক উড়ছিল,তারপর ফুস। 28 | আপনার শুভকামনার জন্য ধন্যবাদ। 29 | স্যার লিটন কে লাইফ সাপোর্টে রাখা হয়েছে। 30 | তুমি কি ভাই মাশরাফিকে নিয়ে ট্রল করলা?? 31 | দুর মিয়া বস কে নিয়া কি আমি ট্রল করতে পারি ,!! বস দলে না থাকলে খেলা তো কেউ দেখবে না , 32 | আশা করি বুঝবে অথবা তাকে রিমুভ করে,অন্যকে ইনক্লুড করো 33 | গুরু ম্যাছ নুনুতে ৭ টা সার্জারি করেও যে বোলিং করে, তাতে তোদের ব্যাটিং ধসিয়ে দেয়ার জন্য যথেষ্ট। 34 | তখন অনেকে এটা বলতো,"ফিক্সিং ম্যাচ। 35 | এই টেস্টে পারফরমেন্স এর বিচারে শ্রীলংকা অনেক এগিয়ে আছে বাংলাদেশ থেকে! 36 | সমালোচকদের জবাব দিতে এইরকম একটি কমেন্টই যতেষ্ট। 37 | রিপোর্টার ভাইকে বলছি, মুমিনুলকে আকাশে উঠাইয়েন না। 38 | এটা হাথুরুর সাথে মুমিনুলের দ্বৈরথ না, বাংলাদেশ-শ্রীলংকা দ্বৈরথ! 39 | মিলন ভাই সহমত প্রকাশ করছি 40 | সময় বাংলাদেশের ভাগ্য ড্র রেখেছে, নাহয় হার চাড়া উপায় ছিলোনা.!! 41 | যে সুনাম পাওয়ার যোগ্য তার সুনাম করাটা দোষের কিছু নয়। 42 | কিছু মানুষ যে খেলা না বুজে এ চিল্লায় আপনি তার প্রত্যক্ষ প্রমান 43 | প্রথম ম্যাচ জিতিয়ে হাতুরিকে গালি আর ২য় ম্যাচে ৮২ রানে পেকেট! 44 | কত ছিল ভাই নাঈম? ৮২ থেকে কম না 45 | বালছাল সাবজেক্ট পড়ে ক্রীড়া সাংবাদিক হয়ে গেছে কিছু আবাল। 46 | এখন নতুন কর্মস্থলে আছেন।এটাকে পেশাদারিত্ব বলে। 47 | খেলাটা বাংলাদেশ আর শ্রীলংকার মধ্যকার। এখানে বারবার হাতুরুকে টেনে আনার মত ছাগলামী কেবল আবালরাই করতে পারে। 48 | কাল মমিনুল দু'ম্যাচ খারাপ খেললে এই মাদারচোদ সাংবাদিকরা ওর চৌদ্দগুষ্ঠি উদ্ধার করবে! 49 | মিরাজকে কেন দিনের ২৭ ওভার পর বোলিংয়ে আনলেন?  50 | বিশেষজ্ঞ স্পিন কোচ থাকার পরও কেন ঘরের মাঠের উইকেটে জায়গা খুঁজে পাবেন না স্পিনাররা? 51 | তামিম ইকবাল কে কিছু বলেন্না কেনো,ওনি যখনি বাংলাদেশ এর রানের প্রয়োজন তখন তিনি সেই দিন রান না করে আউট হয়ে জায় 52 | ,গত ম্যাচে ও ডাউব্বা মারছে এখন আজকেও সেই ডাউব্বা এইটাকি ঠিক করলো? 53 | মুশি আর মমিনুলের আউট দেখে মনে হতেই পারে তারা পাতানো ম্যাচ খেলছে . 54 | ইমরুল বরাবরের মতই সেট হয়ে আউট, তামিম বোলরের উপর চড়াও হতে গিয়ে। 55 | আমার মনে হয় তামিম মমিনুল মুসফিক ওদের কোনো বিগ্ঘাপনের কাজে যেতে হবে তাই তারা জলদি করে মাঠ ছেড়ে ছলে এসেছে 56 | নিষিদ্ধ ক্রিকেট লিগ ও দেশ বিরোধী আপনার সিদ্ধান্তের বিষয় কি আপনার অনুশোচনা হয়? 57 | উদিয়মান ক্রিকেটারদের প্রতি আপনার বক্তব্য কি আফতাব? 58 | প্রিয় ক্লাব মোহামেডানকে প্রিয় প্লেয়ার আফতাব আবারও চ্যাম্পিয়ন করাক,,অনেকদিনের শিরোপাখরা কাটুক...আফতাব ভাইয়ের কাছে এই প্রত্যাশা রাখি 59 | খুব খারাপ লাগছে কি করে ইউকেট হারিয়ে এসেছে বুজতেই পারলাম না দোয়া করি কাল ভালো কিছু করুক 60 | উনার ব্যাটিং স্টাইলটা আমার খুব ভালো লাগতো। এ্যা লিজেন্ড 61 |  ক্রিকেট খেলা বন্ধ করে দেওয়া উচিত। 62 | ক্রিকেট জগতে সর্ব নিন্ম স্হানে চলে যাচ্ছে বাংলদেশ ক্রিকেট টিম।, 63 | কিছু কিছু খেলোয়ার শতশত কৌটি টাকার মালিক। বেট, বল কোথায় যায় জানেওনা। 64 | আফতাব আহমেদ, আপনার সেই ৬টা এখনো ভুলতে পারিনি। 65 | আফতাব, তুমি ওয়ানডেতে বাংলাদেশের প্রথম ৫ উইকেট শিকারি। 66 | টাকার গরমে অনেক খেলোয়াড় মন্দ আচরণ করেন, এটা ঠিক নয়, ভালো মানুষ হতে শিখুন 67 | বাংলাদেশ ১৬০ রানে আউট হয়ে যাবে 68 | বাংলাদেশ ১৬০ রানে আউট হয়ে যাবে 69 | ইমরুল বাদে বাকি তিনজনের আউট মেনেনিতে পারছিনা ? 70 | অনেক দিন পর দেখলাম আফতাব ভাই কে।। 71 |  আফতাব ভাই কে আবার চাই। 72 | ভাই আমি চেলেঞ্জ করতে পারি আমি ওয়াের্ল্ডের নাম্বার 1 অলরাউন্ডার হতে পারবো 73 | পেছন দিয়ে বের হয়ে গেছে মিরপুর ৷ 74 | মমিনুল অথবা শাহরিয়ার নাফিস কি ওয়ানডাউনে আসতে পারেনা?বে 75 | জলাবদ্ধতা আর পাহাড় কাটা অনেক পরিমানে দূর হলে চট্টগ্রাম ফুটবল/ক্রিকেটে ভালো দেখাতে পারতো। 76 | এটা কি বাল ডেকে এনেছে 77 | আমরা চাই,দল ভাল করুক 78 | আফ্তাব আহমেদ, খুব ভাল লাগল। কত্তদিন পরে দেখলাম। ধন্যবাদ প্রথম আলো 79 | আফতাব u ম্যাচ উইনার। 80 | এই লেভেলে এসে মমিনুল আর মুশফিকের আউট না মেনে নেয়া যায় না।।।। 81 | পাগল ছাগল দেশের গুরুত্বপূর্ণ আসন গুলোতে বসে থাকলে যা হওয়ার কথা তাই হচ্ছে। 82 | বেদ্দপ সাকেপকে বাদ দিয়ে বচ মাশরাফিকে নেয়া হোক ।  83 | শুনলাম তিনি নাকি ঢাকা প্রিমিয়ার লিগে ব্যাটে ও বলে ঝড় তুলছেন । 84 | বাদ্দপ সাকিব???আচ্ছা রাগ করবেন নাহহ ভাই। 85 | এক কাজ কর তুই আর তর বাপ মিলে নাম তাহলে আরো ভালো হইবে 86 | পীরবাবার মুরিদরা বাবার নুনুর পানি খেয়ে পবিত্র হয়ে নিন! 87 | তুর বচ দিয়া t20 হপে না 88 | তোমারা আমাকে একটা পীরবাবা মাশরা ফি দাও আমি তোমাদের ১০০ টা মুরিদ দেব ----বানীতে স্যার ডন ব্যাডম্যান 89 |  বিবেক বনাম আবেগ 90 | ত্রি দেশীয় ওডিআই সিরিজে কোন বাল ফালাইছে তোর বচ!! শালা আবালের দল 91 | আচ্ছা মাশরাফি কে নিয়ে আপনাদের এত চুল্কানি কেন?? এখানে তো মাশরাফির প্রসঙ্গ আসারই কথা না। 92 | বোকা চোদা খেলার কিছু বুঝস শালা পাগল। 93 | ইয়াসির,,,তোর বাবা মাশরাফি টি ২০ খেলার কোনো যোগ্যতাই নাই বুঝলি। 94 | আমাদের দেশের খেলোয়াড়, তাই একজনকে ভালো বলবেন, আরেকজনকে গালি দেবেন এটা ঠিক না 95 | শালার সব পাগলচুদা। মাসরাফি যেমন অামাদের সম্পদ তেমনি সাকিব ও অামাদের সম্পদ। সোজা কথা। 96 | পীর বাবা আবার কে? 97 | চুদনার ছেলে সাকিব সম্পর্কে কি জানিস * 98 | কি সার্কাজম করলি রে ভাই পাব্লিক বুজলোই না 99 | ৪ওভারে ৮০রান,আর ব্যাটিং এ নেমে ৩ওভার খেয়ে ডাগ মেরে বিশ্ব রেকর্ড করবেন বচ মাশরাফি 100 | ৪ওভারে ৮০রান,আর ব্যাটিং এ নেমে ৩ওভার খেয়ে ডাগ মেরে বিশ্ব রেকর্ড করবেন বচ মাশরাফি 101 | প্রশ্ন হলো, নান্নু এতো প্লান করে কেন?তার প্লানিং দেখলে শুনলে শুধু মারার ইচ্ছা করে ওরে। 102 | এখন ও সময় আছে।। বাংলাদেশ এর ক্রিকেট কে বাঁচাতে নান্নু,বাশার,সুজন এর জায়গায় অন্য কাউ কে বসানো হোক।। 103 | অাগেই আলেছি এই গাঁজাখোর নান্নুই এবং পেটুক সুজন বাংলাদেশ ক্রিকেট ধ্বংস করার জন্য যথেষ্ট। 104 | নান্নুর নু* কাইট্টা বাজারে বেচে দিতে হইবো।  105 | পরে আপনাদেরেই সুবিধা.. এই টপিকটাকে ইস্যু করে ব্রেকিং নিউজ দিতে পারবেন 106 | না না আপনি চালিয়ে যান,পাবলিক অনেক মজা পাইতেছে।আগে রাজনৈতিক ব্যক্তিদ্বয় মজা দিতেন,এখন আপনারাও। 107 | বাঙ্গালী কিছু পাক আর না পাক তবে মজাটা প্রচুর পাইতেছে। 108 | হাতুড়ি বাংলাদেশ আসর পর থেকে পোলাপাইনে হাতুড়ি কে নিয়া বাজে কথা বলেছে কিন্তূ হাতুড়ি কিছু কইনাই মাঠে দেখায় দিসে. 109 | দেখ পোলাপাইনরা হাতুড়িরে আর খেপাইস না নাইলে কিন্তু টি20 হারমু 110 | নান্নু ভাই তো ঘুমায়ে থাকে।  111 | এইসব উনি বলেন নাই উনার ক্যামেরাম্যান করছে। আর সবচেয়ে বড় কথা এইসব এডিট করা যায়। 112 | সাকিবের জায়গায় কি মোহাম্মদ মিঠুনকে আনা সম্ভব? 113 | তামিমের স্ট্রাইক রেট খুব বাজে ১০৮.০. সে খুবই ভাল ওপেনার।  114 | পাবলিক খুব ভালো ভাবেই বুঝে এইসব নাটকের মানে! এই নাটক বন্ধ না হলে কেনিয়া হইতে বেশি দিন সময় লাগবে না 115 | সাকিব মিনহাজুল কি জানতো না জানতো এসব ফালতু তত্ত্ব দিয়ে জনতার কি উপকার হবে। 116 | মূর্খ জনতা কাঠের তক্তা দিয়ে বারি মারলে যে টাকা দেয় এটাই তো তাদের জন্য খুশির খবর। 117 | ফালতু তত্ত্ব জনতার মাথায় ভরে তোরা মিডিয়া টাকা কামাছ 118 | বটে বটে -- দেশের খেলা গোল্লায় যাক --সাকিবকে যত্ন সহকারে বিশ্রামে রাখতে হবে । 119 | সামনে আই পি এল -- মহাশয়ের সেখানে যেন কোনো ঘাটতি না থাকে -- রাজাধিরাজের যে আবার আই পি এল খুব-ই পছন্দ 120 | যতসব পাগল ছাগল টিম মেনেজমেন্ট রেখেছে বিসিবি.. 121 | তাদের উল্টা পাল্টা ডিসিশনের কারনেই শ্রীলংকার কাছে দল হেরেছে 122 | এই মিনহাজুল নান্নু পুরাই বিনোদনের বাক্সো। তারে বাংলা ছিনেমায় জায়গা দেওয়া হোক। 123 | পাপন গাড়িয়া, নান্নু গাড়িয়া,ফারুক গাড়িয়া,মাসুদ গাড়িয়া,আকরাম গাড়িয়া সব বলদের বাচ্চারা আওয়ামিলীগের।! 124 | আগে কুত্তাটাকে নির্বাচক থেকে অপসারণ করতে হবে।একটা ছাগলের বাচ্চা। এইসবকে কি করে নির্বাচক করে বুঝি না 125 | গতিদানব #সুজন এবং ব্যাটিং লিজেন্ড #নান্নু মিলে ত ক্রিকেটর ভালই উন্নতি করে ফেলেছে....। 126 | নান্নুর ত্রকটা খেলা দেখছি কলিকাতায় কেনিয়ার সাথে তার মাথা গরম হয়ে গেছে মাথায় পানি ডালার পর আউট হয়ে গেছে ! 127 | সেই দিন হেরে গেছে আজ সে নির্বাছক তাহলে কেমনে জিতবে গেলায় !! 128 | নান্নু সাহেব একজন গন্ড মুর্খ অগ্রপশ্চাৎ বিবেচনা না করে কিভাবে দল নির্বাচন করে,,, 129 | নান্নু এখন গাজা খায় তাই বোড এর কাছে অনুরোদ নান্নু কে একাটা গাজার বাগান করে দেওয়া হোক 130 | এই গুলা কিছু বুঝে না ক্রিকেট এর, নান্নুর নিজের কুনো জ্ঞান বুদ্ধি আছে বলে হয়ে না, 131 | পাপন জা বলে তাই করে,মুসাদেক কে বাদ দিয়ে সাব্বিরকে দলে এর কারন কি 132 | কারন মুসাদেক আবাহনী র প্লেয়ার, তাই তাকে দিয়ে লিগ খেলাতে হবে,জাতিয় দল গুলায় জাক তা পাপনের কিছু আসে জায় না। 133 | ভালো ক্রিকেটার হলেই ভালো নির্বাচক হওয়া যায় না নান্নু ভাই‌, 134 | নান্নু ভাই, সুজন ভাই এদেরকে বিসিবি থেকে সরিয়ে দেওয়া হোক। 135 | নান্নু ভাইকে সাকিবের বদলে দলে ডুকানোর জোর দাবি জানাচ্ছি।, 136 | পারলে পাপন কাক্কুকে ও দলে ডুকানোর ব্যবস্থা করলে ভাল হয়। 137 | সে যদি দেশের হয়ে না খেলতে পারে....তাহলে IPL না খেলতে দিয়ে দেখান কেমন পারেন...!! 138 | যত্তসব ধান্দাবাজ...দেশের সম্মানে থেকে তার কাছে টাকা বড়...! 139 | আবাল এখানে Ipl কোথা থেকে আসল?? 140 | Ipl তো আরো তিন মাস পরে।।।আবালের সবসময় আবাইল্লামি করা লাগে 141 | মনে হয় এই সব মাদার চুদদের সাকিব হোল চুসতে দিয়েছে...তাই সাকিবের দালালি করছে..!! 142 | হার টা এখন সহনীয় হয়ে গেছে।তাই বাংলাদেশ হারলেও কিছু মনে হয় না। 143 | সাকিব কে T-20 স্কোয়াডে রাখছে,,যাতে দর্শকের উত্তেজনার পরিমাণ কমে যায় । 144 | যে দেশে টি টুয়েন্টি খেলার জন্য টেষ্টে অনুশীলন হিসেবে খেলানো হয় তাদের আবার কি হবে। 145 | আমার তো মনে হচ্ছে বাংলাদেশ ক্রিকেট নিয়ে বানিজ্য শুরু হয়েছে , 146 | কোন ম্যাচে কে খেলবে বা খেলবে না তা নির্ভর করে বড় বড় কর্মকর্তাদের বানিজ্যের উপর , যে বেশি টাকা দিতে পারবে , তাকে সেই ম্যাচ খেলাতে পারবে , 147 | এখনও সময়া আছে বাংলাদেশ ক্রিকেট এর স্বার্থে সবাই কে ঐক্যবদ্ধ হতে হবে 148 | স্বৈরাচার পাপন,মিথ্যাবাদি মিনহাজুল ক্রিকেট কে ধ্বংসের খেলায় মেতে উঠেছে।মিনহাজুল ক্রিকেটের কিছুঈ বোঝে না। 149 | পাপন তো আগলা বলদ। 150 | এখন ও সময় আছে।। বাংলাদেশ এর ক্রিকেট কে বাঁচাতে নান্নু,বাশার,সু জন এর জায়গায় অন্য কাউ কে বসানো হোক।। 151 | এই নান্নু তার ক্রিকেট জীবনে একটা ফিফটি করতে পারে নাই, যার ক্রিকেট সম্পর্কে কোন ধারনা নেই সে হলো নির্বাচক। 152 | বলদ দিয়ে হাল চাষ করা যায় কিন্তুু এগুলোরে দিয়ে কিছু হবে না। 153 |  গোপাল ভাঁড়ে দেশ ভরে যাচ্ছে । 154 | এখন ও সময় আছে।। বাংলাদেশ এর ক্রিকেট কে বাঁচাতে নান্নু এর জায়গায় অন্য কেও কে বসানো হোক।। 155 | এখন ও সময় আছে।। বাংলাদেশ এর ক্রিকেট কে বাঁচাতে নান্নু এর জায়গায় অন্য কেও কে বসানো হোক।। 156 | কোন বাল খেলে খেলুক আমাদের জিততে চাই 157 | একে আসলে নির্বাচক প্যানেল থেকে সরিয়ে দেয়া উচিৎ 158 | এত পাগল নিয়ে কি যে করি 159 | নানুভাইয়ের কি যোগ্যতা আছে নির্বাচক হওয়ার??? 160 | আমার তো মনে হয় সুযোগ পেলে নান্নু কাক্কু নিজেই ম্ঠে নামতেন 161 | গাঁজাখোর নিবাচক এটা, নিবাচক থেকে বাদ দিতে হবে 162 | এগুলো বাংলাদেশ ক্রিকেটের বিনোদন। আরো কত কি যে দেখার বাকি আছে... 163 | গাজাঁখোর নির্বাচক কমিটি বলেই এমন অবস্থা । 164 | নান্নু ভাই আর এরশাদ ভাই এক ভাই এক ভাই!! 165 | হাগলামি শুরু করিছে, নান্নু, সুজনকে ইয়াবা খাওয়াইতে হবে 166 | নান্নুর নুনুতে ইট বেধে পুরা বাংলাদেশ ঘুরাইতে হয় , হ্লায় আস্তো রাবিস! 167 |  নান্নু খেলা কি তাই বলতে পারেনা 168 | আমি আইসিসি কে অনুরোধ করবো মিরপুর এর এই উইকেট কে বাতিল ঘোষণা করা হোক 169 | এদের খেলা দেখা বরযন করতে ছাল নাই কুততা বাগা বাগা নাম 170 | টি ২০ ক্রিকেটার দিয়ে টেস্ট খেলা,আর টেস্টের খেলোয়াড় দিয়ে টি ২০ খেলান। 171 | নুনু ত ক্রিকেটি বুজেনা 172 | নান্নুর বউ টাকে ভালো করে চিনি,একজন চরিত্রহীনা মেয়ে,চালচলনে লুচ্চামি 173 | দেশের সবখানেই এখন পলিটিক্স 174 | এই সরকারের সাথে থাকতে থাকতে সবাই দুর্ণীতি বাজ হয়ে গেছে। 175 | সার্কাসের প্রাণিগুলোকে মডিফাইড করে মনে হয় বিসিবিতে নিয়োগ দেওয়া হয়েছে 176 | চলিতেছে সার্কাস 177 |  মিনাজুল হলো আবাল 178 | "আমার মনে হয় তার পাখা গজায়ছে। 179 | " 180 | এই গুলার কোন জ্ঞান নাই শুধু তৈল বাজির কারনে চাকরি করতে আছে।. 181 | নির্বাচকদের মাথা খারাপ হয়ছে। 182 | মাত্রাতিরিক্ত গাজা খাইলে যা হয় 183 | যত প্রকার গাধার দল বসে দল নির্বাচন করে ৷ 184 | ও তো একটা ভুটি! 185 | বোর্ডের লোকেরার তালবাহানা শুরু করছে। 186 | এটা বিসিবি নয়,মনে হয় যেনো একটা পাগলা গারদ।এটা বিসিবি নয়,মনে হয় 187 | খেলা নিয়ে নাটক শুরু করেছে।অর্থাৎ বাংলাদেশ আবার পুরনো রূপে ফিরে যাবে। 188 | টিকিট বিক্রি যেন বেশী হয়,,তাই! 189 | "নান্নুভাইরে ফেমিকন খাওয়ান দরকার,,, 190 | " 191 | ভচ মাছ্রাফি কে নেওয়া হোক,একাই হারাই দিবে ভচ,পাদ বাবা মাচ্রাফি 192 | হারামজাদা মরক 193 | শুধু তামাশা 194 | নান্নু মতো লিজেন্ডরাই আমাদের ক্রিকেট ধবংস  195 | এইসব বোকাচোদা নির্বাচক দিয়ে হবে না...পরিবর্তন চাই 196 |  নান্নুর ছাগলামি দিনদিন বেড়েই চলেছে 197 | আরে ভাই নান্নু ঘুমে থাকে ওর হুস থাকেনে!এটা নিয়া রাজনীতি করার কিছু নাই 198 | কাল লান্চের পর একটু বাথরুমে গেসিলাম।এসে দেখি দুই বেডা কথা কইতাসে মাঠে কোনো খেলোয়াড় নাই। 199 | হালকা মুতার জন্য গেসিলাম। 200 |  হাত মারছিলেন বুঝি 201 | গতি দানব খালেদ মাহামুদ সুজি, পাপন আর মিনু চাচুদের দিয়ে এদেশের ক্রিকেটের উন্নতি হবে না। 202 | তারা এক একজন বড় মাপের পাকনা পাশাপাশি পাওয়ার লেস। 203 | এত বড় পাকনা যে উপমহাদেশের সাথেও তারা স্পীন উইকেট বানায় 204 | তাদের স্পীন এটাক যে আমাদের থেকে ভালো তা কি এই পাকনাদের মাথায় ছিলো না? 205 | অবশেষে মনের মতো একটা আর্টিকেল লিখলো 'প্রথম আলো'। 206 | এটা পড়েও যদি বিসিবি আর তাদের খেলোয়াড়দের লজ্জা না লাগে, তাহলে তাদের পশু বললে ভুল কোথায়?? 207 | সাব্বিরকে" কেনো ২য় টেস্টে হুট করে নেয়া হলো? 208 | প্রধান নির্বাচক মিনহাজুল আবেদীন অদ্ভুত এক যুক্তি দেখিয়েছিলেন, ‘টি-টোয়েন্টি সিরিজে ওকে নিয়ে আমাদের পরিকল্পনা আছে। 209 | অনুশীলনও দরকার। তাকে যদি কোথাও না রাখি, তাহলে তো অনুশীলনের সুবিধাও পাবে না।’ 210 | টেস্ট খেলে টি টুয়েন্টির অনুশীলন! বাহ নান্নু বাহ!! 211 | এই দেশের ক্রিকেটের প্রধান নির্বাচক কোন লেভেলের টেলেন্ট আমি বুঝে উঠতে পারতেছিনা! 212 | আমি জানি পাপনের আবাহনী তে খেলানোর জন্য মোসাদ্দেক কে এই স্কোয়াডে রাখা হয়নি। 213 | প্রতিবেদক কে ধন্যবাদ এমন রসালো প্রতিবেদন পেশ করার জন্য। 214 | কষ্ট হচ্ছে বিসিবি'র জন্যে, যে বেচারা এমন গোঁজামিল দেওয়া যুক্তি দেখিয়েছেন সাব্বিরের অন্তর্ভুক্তি নিয়ে, 215 | এই প্রতিবেদন তার চোখে পড়লে লজ্জায় মুখ লুকোবে আর ভাববে আরেকটু ভেবেচিন্তে সাজিয়ে বললে মনে হয় এমন বিপদে পড়তে হত না। 216 | আরে বাবা অযৌক্তিক কাজের যুক্তি টাও তো যৌক্তিক হতে হবে নাকি,, 217 | পরের বার এমন স্বজনপ্রীতি করলে যৌক্তিক যুক্তি টা সাজিয়ে রাখবেন,যাতে প্রেস কনফারেন্সে বিপদে পড়ে এমন আনকোরা যুক্তি মুখ থেকে বের না হয়। 218 | নাহলে কিন্তু সাংবাদিক বাবাজি আবার এমন ওয়াশ করার সুযোগ হাতছাড়া করবে না 219 | ওরে কেউ একটু এই অার্টিকেল রাইটার কে কোলে নে..... জিও গুরু,,, 220 | মি আগিই বলছি আমরা এমন কিছু করতে পারি যা অন্যান্য দেশের মানুষ ভাবতেও পারেনা. 221 | বিশেষ করে তারা অন্তত গুদগুদে সুজনের জ্ঞান সহ্য করতে পারে না। 222 | কত কোচ এল আর গেল কিন্তু আমাদের বোলারগুলারে কেউ ব্যাটসম্যান বানাতে পারলনা।২৬ এভারেজ নিয়ে এই যুগে কেউ টেস্ট ওপেনার!! 223 | নির্বাচক বলো অন্য কর্তারা বলো সব একেবারে সব জান্তা হচ্ছে পাপন.. 224 | ক্রিকেট কোন ধারনাই নাই তার,পিচ নিয়ে কিছু বলবে আবার ফাইন,এটা নিয়ে কিছু বললে আইন ভঙ্গ.... 225 | লিজেন্ড পীর স্যার মাশরাফী বাবা মাঠে খেল্লে পাদের পর পাদ দিয়ে শ্রীলনকা কে কুপকাত করে মেছ জিতে তবেই বাড়ি ফিরত, আবালচোদা মাশরাফি ফ্যন দের বানী 226 | টি টুয়েন্টিতেও বাঁশ খাবে! দিন শেষে হাতুরের জয়! দলের কোচ হয়েই তিনটা ট্রফি!আর কি চাই!! 227 | পীরবাবার মুরিদরা বাবার নুনুর পানি খেয়ে পবিত্র হয়ে নিন! 228 |  পীরবাবার নুনু এখন ইঞ্জুরিতে 229 | টি টুয়েন্টিতেও বাঁশ খাবে! দিন শেষে হাতুরের জয়! দলের কোচ হয়েই তিনটা ট্রফি!আর কি চাই!! 230 | বিশ্ব ক্রিকেটে বাংলাদেশের মত অদক্ষ নির্বাচক মনে হয় আর কোথাও নাই। ওদের দ্রুত বাদ দিতে হবে। 231 | ওই ব্যাটা মিনহাজুল কে গরু ছাগলের খামারে বেঁধে রাখা হোক। 232 | এসব আবালেরা যতদিন নির্বাচক প্যানেলে থাকবে ততদিন দেশের খেলার বারটা বাজবে। 233 | গুগল সার্চ করে মিনহাজের রানরেট দেখে নিন?  234 | এভারেজ ১৪ রানরেট নিয়ে এমন একজন ব্যক্তি কি করে প্রধান নির্বাচক হয়?? দলিয় কোটায় উনি প্রধান নির্বাচক?? 235 | নির্বাচক সাহেবরা, এই কারনেই তো বাংলাদেশের ক্রিকেটাররা বিয়ের আগে অন্য মেয়েদের টেষ্ট করে নেয়। ওদের আর দোষ কি, আপনারাই তো শিখিয়েছেন। 236 | কোচের পাশাপাশি দেশের বাইরে থেকে নির্বাচক কমিটি নিয়োগ দেওয়া উচিত। বর্তমানে যারা এই দায়িত্ব পালন করছেন তারা খুব জঘন্য! 237 | ডিজিটাল দেশের নির্বাচক বলে কথা তাই আর কি??শুধু সাব্বির কে কেন আরো কয়েকজনরে নিতে পারতেন টেস্টে টেস্টিং টা হয়ে যেত। 238 | উভয়কেই সেলাইন খাওয়ানো প্রয়োজন. 239 | তাই তো বলি- এই সাব্বির কেন "গোল্লা" ছাড়া বুঝেনা। 240 | দেখা গেলো সে টি-টোয়েন্টিতেও "গোল্লা" মেরে বসে আছে। সাবাস বিসিবি। 241 |  উভয়কেই সেলাইন খাওয়ানো প্রয়োজন. 242 | দারুন লিখেছে।কিন্তু আমরা জাঞ্জ নি:সন্দেহে প্রধান নির্বাচক নান্নুর এতে এতটুকুও লজ্জা হবে না।কেননা নান্নু ও সুজন নিজেদের সবথেকে মাথাওয়ালা মনে করে আর অন্যদের মাথামোটা মনে করে। 243 | আহামরি কি কপাল খেলে পোলাপাইন আমরা করি নিজেদের ইচ্ছে পূরণ। 244 | চলেন আমরা নান্নু,সুজইন্নার ঘর বাড়ি জ্বালাই  245 | বিসিবির ফটকে আগুন দেই... হোগায় আগুন ধরাই না দিলে তাদের হুস হবেনা।বালের খেলোয়ার....সারা দিনে কাম খালি খেলা আর সেটাই পারে না! 246 | তবে যাই হোক ধন্যবাদ নান্নু ভাইকে আমাদেরকে একটু প্রেকটিস এ সুযোগ করে দেয়ার জন্য । 247 | মিনহাজুর আবেদিন পুরাই আবাল একখান! হালার পু হালা পাগল হইছে. তাই সাব্বির কে দিয়ে টেস্টেই টেষ্ট করতিছে... 248 | বাংলাদেশের দল নির্বাচক এরা এমন কি গ্রেট প্লেয়ার ছিলেন যে, এর চাইতে ভাল কিছু তাদের মাথায় আসবে।তারাও ত একটু অনুশীলন করে নিলে পারেন। 249 | প্রথমে নিন্দা জানাই "বিসিবি"কে তারা সবাই জাতীয় লিগে চিন্তিত! 250 | নিন্দা জানাই বিসিবর টিম ম্যানেজমেন্টের সদস্যদের তারা যেন মাঠে এক দল গরু ছেড়ে বললো তোমাদের দেখভাল তোমরা করো , 251 |  বাংলাদেশ দলে পারফরম্যান্স এর কোনো দাম নেই । 252 | এখানে, কোনো প্লেয়ার দু একটা সুন্দর শট মারলেই তাকে অগ্রাধিকার দেওয়া হয় ॥ 253 | মুশফিক, মাহমুদুল্লাহ, মুমিনুল অনবরত পারফরম্যান্স করার পরেও তাদের দলে থাকা না থাকা নিয়ে টেনশন করতে হয় ॥ 254 | সৌম্য, লিটন দাস, সাব্বির এর মতো খেলোয়াড়দের অনবরত সুযোগ দেওয়া হয় ॥ 255 | রিফুল হক এর মতো প্লেয়ারকে সহজেই ওয়ানডে স্কোয়াডে রাখা হয়না, কিন্তু ঠিকই সাব্বির, লিটন অহরহ ম্যাচ সুযোগ পাচ্ছে আর ডাক্ মারছে । 256 | মুমিনুলকে ওয়ানডে ক্রিকেটে একটি ম্যাচেও সুযোগ দেওয়া হচ্ছেনা, কিন্তু ঠিকই ইমরুল / সৌম্য খারাপ করেও বারবার সুযোগ পাচ্ছে 257 | মুমিনুল এর মতো সুন্দর ও একুরেট খেলার এবিলিটি তামিম এর নেই । 258 | বলপ্রতি রান বের করার এবিলিটিও মুমিনুলের তামিম থেকে বেশি । 259 | লক্ষ্য করলে দেখবেন তামিম এখন অনেক ডট দেয়, কিন্তু মুশফিক বা মুমিনুল এরা অতটা ডট বল দেয়না । 260 | সৌম্য, কায়েস, সাব্বির এই তিনজনের একজনকে বা দিয়ে মুমিনুলকে ওয়ানডেতে সুযোগ দিলে ভালো হবে । 261 | আমার মতে বাংলাদেশের বর্তমানের কিছু গ্রেট ব্যাটসম্যান :তামিম, মুশফিক ,মাহমুদুল্লাহ, মুমিনুল,সাকিব । 262 | এসব লোকেদের বিমানের উপর তুলে পু** মারা উচিত।যাতে পড়ে যাওয়ার ভয়ে প** মারা নিতেই থাকে 263 | টিম ম্যানেজমেন্ট, কোচিং স্টাফ, কিউরেটর চেঞ্জ করা উচিৎ। 264 | অযোগ্য লোক দিয়ে বোর্ড চালালে এমন অবস্থা হবে।যারা নির্বাচক আছে তাদের ক্রিকেট ইতিহাস দেখলে বুঝা যায়,তারা কেমন নির্বাচক??? 265 | হাবিবুল বাশার,আমিনুল, রফিক,,,যিনি দলেই চান্স পাননি তিনি প্রধান নির্বাচক। 266 | টেস্ট করতে আর ফরম্যাট পেলেন না,,এই যুক্তির কোন গ্রহনযোগ্যতা নেই,ওনার পদত্যাগ করা উচিত,অবশ্য এই দেশে পদত্যাগের সংস্কৃতি নেই,, 267 | এরা সব বেহায়া,আর মানুষিক বৈকল্য ধারী । না হলে এধরণের উদ্ভট যুক্তি দিতে পারে কোন ক্রিকেট বোধ সম্পন্ন ব্যাক্তি ? 268 | নির্বাচকমণ্ডলী দের গালে জুতা মারা উচিত.. হালার পুতরা টাকা খাইতে খাইতে মাথা উতা টিক নেই. কি বলতে কি বলে একটু চিন্তা করি নায়। 269 | বস ভাল করবে ইটাই আশা করি,দারুন এরজন ব্যাটিং অলরাউন্ডার, 270 | বস ভাল করবে ইটাই আশা করি,দারুন এরজন ব্যাটিং অলরাউন্ডার, 271 | গুগল সার্চ করে মিনহাজের রানরেট দেখে নিন? এভারেজ ১৪ রানরেট নিয়ে এমন একজন ব্যক্তি কি করে প্রধান নির্বাচক হয়?? 272 | টিম মেনেজমেন্ট থেকে শুরু করে সবাইকে গাজার পরিবর্তে অাফিম দেওয়া প্রয়োজন... যাতে নেশা হলে ও মস্তিষ্ক টা নিয়ন্ত্রণে থাকে.....ফালতু সব গাজাখুড়ি বাহানা 273 | স্টাফ কিন্তু, আমাদের জন্য ভয়ঙ্কর ছিল। 274 | শুধুমাত্র,রিডামিং ফ্যাক্টর খাদ্য ছিল,পুরোপুরি ন্যায্য হওয়ার জন্য, , যা গড়ের চেয়েও বেশি ছিল, কিন্তু অন্যান্য দুর্বলতাগুলির জন্য এটি তৈরি করা সম্ভব হয়নি 275 | এটি খুব বেশি চিত্তাকর্ষক এবং খুব সুস্বাদু নয়। 276 | এটি খুব বেশি চিত্তাকর্ষক এবং খুব সুস্বাদু নয়। 277 | আমাদের টোস্ট ভুলে গেছি,তাদের পেঁয়াজ ছিল না, , বাম দিকের উপাদানগুলি (একটি omelet পনির), গরম তাপমাত্রা নিচে এবং বেসিন এত উপর রান্না করা ছিল, যখন এটি আমি প্লেট উপর করে crumbled স্পর্শ করি। 278 | দ্বিতীয়ত, এই রাতে জায়গাটি পূর্ব দিকের মহিলার সুগন্ধি দ্বারা পরিপূর্ণ ছিল। 279 | আমরা খুব হতাশ ছিলাম 280 | কেউ শেফে গিয়েছিলে, সব টাকাতো অভ্যন্তর প্রসাধনের মধ্যে গিয়েছে। 281 | আসনগুলি অস্বস্তিকর হয়, যদি আপনি কাঠের বেঞ্চে প্রাচীরের পাশে বসে থাকেন। 282 | ফিরে আসবে না 283 | এটির মান একটি যুগ্ম মান নয়। 284 | ফ্যান এর একটি মহান ধারণা পেয়েছিলাম কিন্তু ডেলিভারি উপর একটু রুক্ষ। 285 | যদিও সেবাটি দরিদ্র,মূল্য যুক্তিসংগত । 286 | আমি রথ এর দ্বিগুণ হয়েছি এবং উভয় বার খুব হতাশাজনক ছিলাম 287 | জিজ্ঞাসা করা হলে, আমরা আরও বিস্তারিত প্রশ্ন জিজ্ঞাসা করতে হবে যাতে আমরা বিশেষ কি ছিল তা জানতাম। 288 | আমি শুনতে চাই না। 289 | মূল্যবান, কিন্তু একবার চেষ্টা একবার মূল্য, অন্তত একবার 290 | আমি সেখানে কয়েক বার গিয়েছি, এবং আমি সাধারণত কিছু চমত্কার অদ্ভুত মানুষ পাশে বসতে শেষ। 291 | মেনু খুব সীমিত - আমি মনে করি আমরা 4 বা 5 এনট্রিস গণনা করি। 292 | খুব পাগল না,তাদের মেটা মার্টিনি সম্পর্কে । 293 | এই রেস্টুরেন্ট সম্পর্কে অন্য সবকিছু পিট হয়,দুর্ভাগ্যবশত, খাদ্য অসামান্য। 294 | তারা প্রায়ই সপ্তাহান্তে ভিড় করে কিন্তু যাতে তাদের সেবা দক্ষ এবং সঠিক হয়। 295 | ডিশ কিভাবে ছোট, ছিল আমার সমস্ত সহকর্মী বিস্মিত ছিল 296 | আমরা এটি বিশেষ আদেশ গ্রিলটি branzino খাওয়া কঠিন যেহেতু হাড়ের সঙ্গে infused . 297 | কখনো আমি এত অমনোযোগী আচরণ করি নি। 298 | আমার ডেলিভারির জন্য রেস্টুরেন্ট অর্ধেক অর্ডার ভুলে যায় 299 | আমাদের উপর চেক করা হয়,কারণ আমাদের সার্ভার পুরো খাবার সময় দুবার 300 | আমি নেতিবাচক স্বাদ কুঁড়ি প্রভাবিত, বাম এবং ডান থেকে আসছে শক্তিশালী scents । 301 | আমরা যদি থামিয়ে দিতাম তবে বুঝতে পারতাম যে তারা কোথা থেকে আসছে, কিন্তু আমরা সেখানে এক ঘণ্টারও কম সময় কাটিয়েছি এবং তারা আমাদের কাছে এখনো একটি চেকও নিয়ে আসেনি! 302 | আমি রিজার্ভেশন করার চেষ্টা করেছি, কিন্তু উভয়ই সময়, হোস্টেলে আমার নাম ছিল না। 303 | এই রেস্টুরেন্ট বেশ সুন্দর হতে ব্যবহৃত। 304 | এটা ক্ষুদ্র ছিল, এবং আমি অনুভব করলাম যে আমি কারো জীবিত রুম এ খাচ্ছি। 305 | এটি অপেক্ষা করছে এটি অসামঞ্জস্যপূর্ণ সামগ্রিকভাবে একটি ওহ 306 | অনাবিষ্কৃত ম্যানেজারদের উল্লেখ না করে, সামগ্রিক অভিজ্ঞতা ভয়ানক ছিল ভয়ানক পরিষেবা ও নমনীয় খাদ্য থেকে 307 | অনাবিষ্কৃত ম্যানেজারদের উল্লেখ না করে, সামগ্রিক অভিজ্ঞতা ভয়ানক ছিল ভয়ানক পরিষেবা ও নমনীয় খাদ্য থেকে 308 | শেষবার যখন আমি গিয়েছিলাম তখন আমরা রান্নাঘরের পাশে একটি করিডোরের টেবিলে বসে ছিলাম। 309 | ছাপানো খাদ্য সঙ্গে না 310 | আমি গত মাসে জিমির ব্রঙ্কস ক্যাফের চেয়ে বেশি আবেগপ্রবণ বোধ করিনি। 311 | হ্যাঁ, তারা চকচকে উপাদানগুলি ব্যবহার করে, কিন্তু কল্পনাপ্রসূত উপাদানগুলি ভাল পিৎজা না করলেও কেউ জানে না যে কীভাবে বিপরীত ডান পেতে হয়। 312 | বাইরের দিকে তাকিয়ে, এক দেয়ালের এই গর্তে প্রবেশ করতে দ্বিধা করবে (সত্যিই, এটা কি তা)। 313 | খাদ্য গড় ছিল এবং creme brulee ছিল ভয়াবহ - চিনি জটানো ছিল না, caramelized এবং কেবিনের গন্ধ না। 314 | আমার পরিবার সম্পূর্ণ ভয়াবহ ছিল। 315 | একটি রেস্টুরেন্ট, খাবার সবচেয়ে গুরুত্বপূর্ণ অংশ সম্পর্কে ভুলে গেছে এই জায়গাটি সত্যিই ট্রেন্ডি 316 | দূর থেকে গ্রাহকদের-এটি একটি পিছনে ঘর করা উচিত 317 | পরিষেবা উন্নত হতে পারে কিন্তু সামগ্রিকভাবে এই জায়গাটি রেস্টুরেন্ট অভিজ্ঞতাতে সামান্য জিনিসগুলির গুরুত্ব (একের জন্য ভারী, কালো, এন্টিক-প্রতারক চায়ের) বোঝে। 318 | প্রথম বন্ধ, ওয়েট্রেস সম্পূর্ণভাবে অযৌক্তিক ছিল 2 বার আমরা তাকে দেখেছি (6 টেবিল সঙ্গে একটি রেস্টুরেন্ট মধ্যে অদ্ভুত) এবং আমাদের অর্ডার ভুল পেয়েছিলাম 319 | যান না 320 | খাবার তেজী তৈলাক্ত ও ছিল 321 | শেষবার আমি এখানে গিয়েছিলাম, আমাদের অর্ডারটি নেওয়ার পর ওয়েট্রেস ফিরে আসেনি। 322 | এটি একটি খুব হতাশাজনক অভিজ্ঞতা আপনার ডেস্কে খাওয়া, বায়ুমণ্ডল এটি সংরক্ষণ করে।এটি একটি খুব হতাশাজনক অভিজ্ঞতা আপনার ডেস্কে খাওয়া, বায়ুমণ্ডল এটি সংরক্ষণ করে। 323 | স্থানটি সর্বাধিক চেয়ে কম বলে মঞ্জুরিপ্রাপ্ত, এটি এমনকি বৃহত্তম রেস্টুরেন্টে এমনকি আপনি পাবেন সেরা পরিষেবা।স্থানটি সর্বাধিক চেয়ে কম বলে মঞ্জুরিপ্রাপ্ত, এটি এমনকি বৃহত্তম রেস্টুরেন্টে এমনকি আপনি পাবেন সেরা পরিষেবা। 324 | এটা ভাল পরিচালিত হতে পারে। 325 | এটা প্রথম দিকে বন্ধ করে,এটি একটি পরিবর্তিত এবং ব্যস্ত রেস্টুরেন্ট। 326 | গাব্রিয়েলা সে যা যা সম্পর্কে বলেছে সবকিছু মিথ্যা.পরিবেশ রোমান্টিক, কিন্তু দরিদ্র সেবা ও খাদ্য ভয়ানক, । 327 | গাব্রিয়েলা সে যা যা সম্পর্কে বলেছে সবকিছু মিথ্যা.পরিবেশ রোমান্টিক, কিন্তু দরিদ্র সেবা ও খাদ্য ভয়ানক, । 328 | স্বীকৃতি পেতে আমাদের টেবিলের কাছে এসেছিলো টাট্টুর বাইরে পুড়িয়ে ফেলা হয়েছিল। 329 | আমার প্যাড থাই ছিল, এবং নুডলস স্টিকি ছিল। 330 | অভিভাবকত্ব অভদ্র হওয়ার অযৌক্তিক বিন্দু। 331 | রাস্তায় মাথা তাদের সাক বার বার হবে,যদি আপনি Haru এর মহান খাদ্য চান, বিশেষ করে হাউস রোল জন্য ক্ষুধা করছেন, কিন্তু অপেক্ষা বিল্ডিং outisde দাঁড়ানো যাবে না, 332 | একটি সংকীর্ণ করিডোরটি একটি ছোট্ট স্থান বাড়ে যেখানে তিনটি ক্ষুদ্র সাদা টাইল্ড কাউন্টার রয়েছে, প্রচুর পরিমাণে জালিয়াতি (বোতল, কাঁধের ডাল) এবং 12-14 এনট্র্রিটের একটি ছোট কভার থাকে। 333 | এই দামে ভবনের ভাল ছাদ জল ক্লাবের জন্য জলের চেষ্টা করবে 334 | অ্যাট্রাকিয়াস থাকার কারনে খাবারটি ভয়াবহ ছিল। 335 | আমি এই রেস্তোরাঁয় কখনোআ দেখা করব না। 336 | উডনের জন্য পানি ও স্যুপ সয়া সস ছিল। 337 | আমি তোমাকে ভালোবাসি, যখন তারা তাদের খাদ্যের অর্ডার আপনার দিতে বলেছে তারা বললো পাল্টা সব ব্যবসা হতে পারে। আমি তোমাকে ভালোবাসি, যখন তারা তাদের খাদ্যের অর্ডার আপনার দিতে বলেছে তারা বললো পাল্টা সব ব্যবসা হতে পারে। 338 | যান না সেখানে 339 | একটি সারণি পেয়ে সৌভাগ্য কামনা করছি। 340 | তোমার নাক আমার মতো দেখি না ... 341 | ভয়াবহ সেবা 342 | শুধুই এটা করবেন না 343 | উপেক্ষা করুন,শুধু ট্রেন্ডি wannabes এর জন্য 344 | আমি গত দুই বছর ধরে NYCতে অভিজ্ঞতার সহিত আছি,অর্থের জন্য আমার অ্যামা মান খারাপ আছে। 345 | এটি এত বেশি অকথিত নয় আমি মনে করি এটি একটি চমত্কার স্পট ভাল। 346 | ঝুঁকিপূর্ণ হাঁটাহাঁটিও 347 | তারা আমদের এটি জন্য জিজ্ঞাসা না করা পর্যন্ত,এটি আমাদের ডিনার বিশেষ দিন না। 348 | যদিও, সার্ভার রাজস্ব ড্রাইভিং প্রশিক্ষণ বলে মনে হয় যে সত্য,তবুও সবচেয়ে বিরক্তিকর জিনিস। 349 | আমরা যখন সন্ধ্যায় নামলাম তখন আমরা বারে বসে ছিলাম, কিন্তু যখন আমরা পিছন ফিরে দাঁড়ালাম তখন বার থেকে মুখ ফিরিয়ে নেয়ার সময়, $ 2 জন আমাদের কাছে চলে আসেন 350 | তাদের ছুটির সম্পর্কে কিছু ব্যস্ত পার্টি হচ্ছে । 351 | এটি এক ব্রুকলিনের সর্বাধিক উৎকৃষ্ট রেস্তোরাঁ 352 | গত রাতে ২ বছরের বার্ষিকী চলছিল, কাগজ গুলি ছাপানো ছিল না। 353 | এটা বরং তাদের দেরী ছিল,একটি ঘন্টা ধরে বসে থাকতে 354 | তবে, এটি একটি বিশেষ ভ্রমণের মূল্য নয়। 355 | ম্যাকডোনাল্ডে যান এবং আপনার ভিতরে প্রবেশ করুন,যদি এটি একটি সমস্যা মনে হয় 356 | আমি ব্র্যাঞ্চের জন্য তাদের ডিম বেনেডিক্ট করতাম, যা আমার সমগ্র জীবনে সবচেয়ে খারাপ ছিল, আমি হোলান্দিজ সসকে সম্পূর্ণভাবে মুছে ফেলার চেষ্টা করেছিলাম যা এটি আমার ছিল ব্যর্থতা। 357 | একই ঐতিহ্যের খুব খারাপ খাদ্য নয়। 358 | বিশেষ অফার দেয় না,মেনু ভাল দেখায়, চিলির সমুদ্র ব্যাশ অফার ছাড়া, কিন্তু সার্ভার বাইরে বোর্ডে লিখিত ছিল 359 | আমি picky না -কিন্তু এটি আসলে মোটামুটি ছিল 360 | আক্ষরিকভাবে এটি সম্পূর্ণ প্রাচীরের একটি গর্ত, এটি প্রথম দিকে একটু ভয়ের, তবে যত তাড়াতাড়ি বন্ধুত্বপূর্ণ স্টাফগুলি আপনাকে স্বাগত জানায় তত দ্রুত তা পান করুন - কী পেতে হবে তা নিয়ে সাহায্য চাইতে দ্বিধা করবেন না। 361 | যে শুধু চাল থেকে নয়,কিন্তু আয়তন ট্রিপ বেশী চেয়ে রোল হয়,এটি একটি অভ্যন্তরীণ আউট রোলের মধ্যে একটি নিয়মিত রোল চালু করতে $ 2 অতিরিক্ত খরচ হয়। 362 | তখন টনিক পাওয়া যায়নি,অবশেষে তিনি যখন জিন ও টনিক তৈরি করতে ব্যর্থ হন 363 | ডিমের সমষ্টি ঠিক আছে কিন্তু তার যে তাজা স্বাদ নেই, এবং সামান্য পাত্রে তারা (এখানে চীনা চীনা অভাব নোট এছাড়াও) বাষ্পীয় হিসাবে গরম হয় না। 364 | এছাড়াও তারা ছিল $ 15 প্রতিটি! 365 | এই জায়গায় শুধু জায়গা নয়, যদি আপনি ভাল খাঁটি থাই চান 366 | আপনি একটি সম্পূর্ণ অভিজ্ঞতা অনুভূতি দিয়ে মেনু থেকে অর্ডার দেন। 367 | হেঙ্ক কিছুটা কিন্তু কি মূল্যবান 368 | এই জায়গাটি সস্তা নয়,এটা সত্য । 369 | কথোপকথন অসম্ভব,কারন শব্দ স্তর অসহনীয় ছিল । 370 | আমরা যখন লিওনকে হতাশ করেছিলাম,তখন আমরা অবশ্যই ভুলে গিয়েছিলাম যে আমরা বেশ মণি পেয়েছি । 371 | আপনার সময় নষ্ট করার দরকার নাই এখানে ,যে রেস্টুরেন্ট খাদ্য সমর্থনস্থলস্থানীয় সম্পর্কে যত্নশীল 372 | হোস্টিং প্রতিশ্রুতি ছিল যে আমাদের 7 দলের জন্য একটি টেবিল সংরক্ষণ করা , তারপর তিনি 2 জনের দলের একটি টেবিল সংরক্ষণ করলেন (অর্থ ছিল যখন অর্থোপার্জন প্রায় খোলা ছিল)। 373 | আমরা সাবপার ফুড খেতে ম্যানেজার বসা গিয়েছিলাম ম্যানেজার তার কয়েক কর্মচারীর পরিমার্জিত খুঁজে বের করার জন্য মাদকদ্রব্যের জন্য ব্যয়বহুল ভুল ব্যাখ্যা দিল। 374 | আমরা সাবপার ফুড খেতে ম্যানেজার বসা গিয়েছিলাম ম্যানেজার তার কয়েক কর্মচারীর পরিমার্জিত খুঁজে বের করার জন্য মাদকদ্রব্যের জন্য ব্যয়বহুল ভুল ব্যাখ্যা দিল। 375 | আমরা একটি টুনা দ্রবীভূত করার আদেশ দিয়েছিলাম - এটি এমন একটি পনির দিয়ে এসেছিল যার ফলে এটি একটি টুনা স্যান্ডউইচ তৈরি করেছিল। 376 | ব্যতিরেকে আমরা টেবিলের উপর দাঁড়ালাম,তাই ওয়েটাররা সন্তুষ্ট ছিলেন না 377 | আমরা সাধারণত ভাল রেস্টুরেন্ট পছন্দ করি এবং প্রায়ই খাওয়া হয় কিন্তু কাই আমরা পেয়েছিলাম কি জন্য ব্যয়বহুল উপায় ছিল। 378 | এখানে খাওয়াবেন না যদি না আপনি থাই খাবারের জন্য ক্ষুধার্ত থাকেন এবং আপনি পরের দরজায় কাজ করেন। 379 | এই জায়গায় রক্সি এড়ানো, যারা মহান খাদ্য প্লাস মহান সেবা চান। 380 | এই জায়গায় রক্সি এড়ানো, যারা মহান খাদ্য প্লাস মহান সেবা চান। 381 | বেশ স্পষ্টভাবে, খারাপ সুশি আমি কখনও চেষ্টা করি নাই 382 | আমি কিছু আশা কি করতে পারি,যদিও সামগ্রিক দাম ট্যাগ খুবই ব্যয়বহুল ছিল, । 383 | এমনকি আমাকে শেষ বারেরও মতবেশি সময় ধরে চলাচল করার পরেও,আমি সেখানে ছিলাম । 384 | মাছ বেশী ছিল 385 | আপনি অন্যান্য ফরাসি Bistros অনেক টাকা একই পরিমাণ জন্য একটি ভাল ডাইনিং অভিজ্ঞতা পেতে পারেন। 386 | Chinatown মান দ্বারা মূল্যহীন যদিও, এটি মূল্যহীন,সঙ্কলন বাকি 387 | আমরা সকলেই একটি ক্ষমা প্রার্থনা করেছিলাম যেমন আমরা ডিনার ছাড়া আমাদের শো দেখা বাকি ছিল। 388 | আমাদের পাশের টেবিলটি জিজ্ঞাসা করল, তিনি কি আঙ্গুরকে চূর্ণবিচূর্ণ করে দিবেন, যখন তার দীর্ঘ মেয়াদি মদ থেকে বোতল বেরিয়ে আসবে? 389 | ওয়েটার আমাদের উপেক্ষা করেছিলেন তা আমরা আমাদের ওয়েটারের চোখ ধরতে পারি নি 390 | স্পষ্টভাবে এটি রেস্টুরেন্ট না! 391 | তারা দলগুলোর আসন প্রত্যাখ্যান করে সপ্তাহান্তে 3 বা তার বেশি বার 392 | আরো উদ্বিগ্ন বলে মনে হয় ওয়েট্রেস, আসলে waitressing তুলনায় ভাল খুঁজছেন । 393 | কি রেপোফ 394 | লবস্টার স্যান্ডউইচ $ 24 এবং যদিও এটি ভাল ছিল এটি প্রায় মূল্য ছিল না যে দাম দেওয়া আছে। 395 | পাশাপাশি ঠিক ছিল এবং অবিশ্বাস্যভাবে নরম ছিল। 396 | কিছু কারণের জন্য, সলমনের জন্য মেনুতে সমস্ত সীফুডই অনুপলব্ধ ছিল। 397 | জনগণের ভিড় দ্বারা বোকা না 398 | আমাদের সবাইকে বের করে দিতে পারত,কেননা গৃহকর্ত্রী এবং ওয়েট্রেস অবিশ্বাস্যভাবে অবাধ্য ছিল। 399 | এই জায়গাটি এমন একটি গ্রুপ দ্বারা পরিচালিত হবে যা আসলে গ্রাহক সেবা বুঝতে পারে 400 | আমি কাজ করছি এক দুই বছরের মেয়াদে চেষ্টা এটি আমার চতুর্থ বারের চেষ্টা । 401 | সম্ভবত আবার যেতে হবে না ... 402 | আসনটি যদি তারা রেস্টুরেন্টে সর্বাধিক সংখ্যক লোক পেতে চেষ্টা করছিল, তাই আপনার এখানে যখন খেতে পাবেন তখন আপনার প্রতিবেশীর প্রতি সুন্দর থাকুন। 403 | খাদ্য মান খারাপ ছিল, খুব আমি কমপক্ষে খাদ্য ভাল খাওয়ার চেষ্টা করি কিন্তু সব অভিযোগ ছিল না 404 | কেন আমরা বসে থাকি না তা সব ধরনের ব্যাখ্যা শোনা ,পরের ঘন্টা এবং অর্ধেকের জন্য আমরা এই পর্যটক রেস্টুরেন্টের ভিড়ের লবি অঞ্চলে দাঁড়িয়ে থাকি । 405 | একটি যাদু কাঠামো waving এর জন্য $ 600 (আমরা কখনও পরিশোধিত হয়েছে) এমনকি একটি পুনরাবৃত্তি কর্মক্ষমতা জন্য আমাদের ফিরে পাবেন না 406 | এটা ভয়ঙ্কর ছিল। 407 | শাট ডাউন করার জন্য ভয়ঙ্কর, ভয়ঙ্কর ব্যবস্থাপনা 408 | আমি এই রেস্টুরেন্টে আশ্চর্য যা প্রত্যাশা করে এসেছি কিন্ত গিয়ে দেখি ওভার charged বাকি। 409 | আমি এই রেস্টুরেন্টে আশ্চর্য যা প্রত্যাশা করে এসেছি কিন্ত গিয়ে দেখি ওভার charged বাকি। 410 | বায়ুমণ্ডল ধীরগতির এবং ওয়েটাররা আক্ষরিকভাবে যতটা সম্ভব দ্রুত কাজ করতে পারছে। 411 | ($ 200 শ্যাম্পেন 2 গ্লাস জন্য, ওয়াইন খুব ব্যয়বহুল বোতল না এবং 2 ডিনার পানীয় পরে)। 412 | সত্যিই যদিও, সেখানে মজাদার হয়? 413 | খাদ্যটি ঠিক ঠাক ছিল, অন্তত সে খাদ্য উপলব্ধ ছিল। 414 | পরিবেশ চমৎকার ছিল, কিন্তু সেবা টাই মহান ছিল না। 415 | ডিনার ছিল ঠিক আছে, কিছুই আবার হবে। 416 | এটি পুরু এবং সামান্য লঘু 417 | হয়তো এটা শুধু একটি unintentional ভুল ছিল কিন্তু আমি অন্যান্য রেস্টুরেন্টের সাথে একই অভিজ্ঞতা করেছি তাই আমি এই ধরনের অনুশীলন প্রশংসা করি। 418 | তিনি সমাধি সেবা প্রদান করেন এবং তার কোন ব্যক্তিত্ব নেই। 419 | ডিস্ট্রিবিউটের খাবারের দাম কমেছে ... 420 | যদিও আমরা পুঙ্খানুপুঙ্খভাবে খাবার উপভোগ করতাম, কথোপকথনের জন্য টেবিলের দিকে চিৎকার করে বিরক্ত করতে ছিল। 421 | এই জায়গা ছিল না যে! 422 | প্রথমত, এই জায়গা * রোমান্টিক নয় *, সিটিসার্চের সম্পাদকীয় পর্যালোচনা দ্বারা দাবি করা হয়েছে। 423 | উচ্চমানের রেস্তোরাঁর জন্যও ছোট ছোট জিনিস ছিল খাবারটি খুব সুস্বাদু ছিল না, এমন । 424 | যদি আপনি এটি রাখতে না চান তাহলে, কেন একটি রিজার্ভেশন করেন 425 | বাইরে বড় এবং gawky আছে 426 | আমরা কি ভাবনার মধ্যে গিয়েছিলাম,আমাদের একটি deli ছিল ঠাণ্ডা ঠান্ডা আবহাওয়া থেকে বেরিয়ে আসার জন্য অনুসন্ধান করলাম। 427 | আমি সুপারিশ করলাম না কারণ, এটি চীনা রেস্টুরেন্ট যা অন্যান্য লঞ্চ রেস্টুরেন্টের মতই স্বাদ। 428 | $ 760 এর জন্য 2 জন লোক, একবার এটি একটি জীবন্ত অভিজ্ঞতার জন্য। 429 | এমন কোনও রেস্টুরেন্ট হবে না যা আমি ফিরে আসব,যদিও $ 20 এন্ট্রি রেঞ্জটি অতিশয় ব্যয়বহুল নয়, নিউইয়র্ক সিটিতে, এই পরিসরে স্পষ্টভাবে ভাল খাদ্য রয়েছে, এবং তাই নীলকান্তমণি, এটি সুন্দর বায়ুমণ্ডল সত্ত্বেও। 430 | এমন কোনও রেস্টুরেন্ট হবে না যা আমি ফিরে আসব,যদিও $ 20 এন্ট্রি রেঞ্জটি অতিশয় ব্যয়বহুল নয়, নিউইয়র্ক সিটিতে, এই পরিসরে স্পষ্টভাবে ভাল খাদ্য রয়েছে, এবং তাই নীলকান্তমণি, এটি সুন্দর বায়ুমণ্ডল সত্ত্বেও। 431 | অবশেষে এটি পাওয়া যায় যে,আমি নিউইয়র্কে একটি রেস্টুরেন্টের জন্য সত্যিই কঠোর পরিশ্রম করছিলাম যেখানে আমি সত্যিই অবাঞ্ছিত এবং উপেক্ষা করে থাকি 432 | এটি অবশ্যই একটি স্থান নয়,যদি আপনি যদি কাউকে প্রভাবিত করতে চান । 433 | খাদ্য সাধারণত ঠান্ডা হয় ওয়েল, কখনও তাদের deliveries জন্য 434 | খাদ্য সাধারণত ঠান্ডা হয় ওয়েল, কখনও তাদের deliveries জন্য 435 | এটি বন্ধ ছিল,আমি ধূমপান স্যামন এবং রো অ্যাপেটাইজারকে আদেশ দিয়েছিলাম। 436 | তাদের চিকেন টিঁকা মশলা বেশ ভাল,দাম আরো উচ্চতর। 437 | প্রকৃত চেহারা তুলনায় ভাল ছিল,তার ওয়েব সাইটে রেস্টুরেন্টের ফটোগুলি । 438 | খাবার দুর্বল ছিল - খুব মিষ্টি বা খুব লবণাক্ত এবং অংশটি ছিল ক্ষুদ্র। 439 | এটা আমাদের ক্ষুধার সময় তাদের আনতে 25 মিনিট সময় লাগে । 440 | আপনি যদি চান যে আপনার গান বিস্ফোরিত হয় এবং সিস্টেমটি এত বড় না এবং যদি আপনি কমপক্ষে 100 ডলার বোতল ন্যূনতম দিতে চান তবে আপনি এটি এখানে পছন্দ করবেন। 441 | আপনি যদি চান যে আপনার গান বিস্ফোরিত হয় এবং সিস্টেমটি এত বড় না এবং যদি আপনি কমপক্ষে 100 ডলার বোতল ন্যূনতম দিতে চান তবে আপনি এটি এখানে পছন্দ করবেন। 442 | যাইহোক, এই শেষ সময় আমি উইলিয়ামসবার্গকে অতিক্রম করি। 443 | আমরা দ্রুত একটি টেবিলের পেতে ভাগ্যবান ছিলাম কারণ,রেস্টুরেন্ট ছোট ছিল । 444 | নিজেকে সময় এবং কষ্ট সংরক্ষণ করুন এবং এক এড়িয়ে যান! 445 | স্থানটি সামান্য আঁটসাঁট এবং ঠান্ডা দিনে, প্রবেশপথের আসনটি বেশ সুন্দর হতে পারে। 446 | বনের জন্য তারা কিন্তু খুব বড় ছিল। 447 | কিছু টিপস: turnip পিষ্টক, রোস্ট শুয়োরের বন এবং ডিম custards 448 | তারপরও অবশ্যই কোন আসন উপলব্ধ নেই,ওহ হ্যাঁ, এবং তারা ফোন মিথ্যা বলেছে, তারা বাগানে বসা আছে 449 | যে কেউ এই জায়গা পছন্দ করে একটি ভিন্ন গ্রহ থেকে হতে হবে, যেখানে গ্লাস, শুষ্ক এবং গুঁড়ো প্রশংসাসূচক। 450 | তাদের calzones ভয়ানক হয়, খারাপ, বমি-উত্সাহ, YUCK 451 | এটা পান করার জন্য চিরতরে লাগে এবং তারা প্রায় সবসময় কিছু আনতে ভুলে যায় (যদিও তারা এটি জন্য আপনি চার্জ করা ভুলবেন না। 452 | প্রথম, ওয়েটার যারা আমাদের পরিবেশন এবং আমাদের বিশেষ বিশেষ গূণ পূরণ করতে অবহেলা করে , আমি যা বেছে নিই হবে এবং আমি তাদের সম্পর্কে জানেন। 453 | আমি পিছনে টেবিল এ ডাইনিং সঙ্গে পিছনে ফিরে ছিলাম এবং তারা আমাদের বললো অপেক্ষা করুন আবার বললো অতীতে চিপা হিসাবে কর্মীদের আমাদের মাথা উপর লাফানো ছিল । 454 | আমি পিছনে টেবিল এ ডাইনিং সঙ্গে পিছনে ফিরে ছিলাম এবং তারা আমাদের বললো অপেক্ষা করুন আবার বললো অতীতে চিপা হিসাবে কর্মীদের আমাদের মাথা উপর লাফানো ছিল । 455 | আমি প্রথম মরিয়মের সম্পর্কে একটু লেইস ছিলাম - এটি ছোট, ভিড় এবং আপনি সাধারণত লাইন অপেক্ষা করতে হবে - কিন্তু আমি খুশি আমি অবশেষে চেষ্টা করেছি 456 | আমার ভাগ্যে একটি ছোট শেল ছিল যা আমি আউট করেছি 457 | আমি সব খরচ এড়াতে বলছি,খাদ্য সামগ্রিকভাবে ভয়ানক ছিল 458 | দুর্ভাগ্যবশত, খাদ্যের কিছু সম্পর্কে কাজ করতে কিছু ছিল না। 459 | ম্যানেজার মূলত আমাকে অন্যত্র আমার ব্যবসা নিতে বলেছিলেন ,আমি একটি খোলা সম্মুখীন পনির স্যান্ডউইচ এর জন্য জিজ্ঞাসা করি । 460 | আমরা শনিবার রাতের বিকল্পের অর্ধ-মূল্যের সমর্থক ছিলাম, যখন সাম্প্রতিক এক সাক্ষাৎকারে কিছু অদ্ভুত স্কুইজ ছিল। 461 | আমরা চলে যাই, কখনো ফিরে আসব না 462 | কোন ক্ষমা এই সপ্তাহে রেস্টুরেন্টে । 463 | খাদ্য এবং সেবা অনেক ভাল হতে পারে, যদিও Ambiance এবং বায়ুমণ্ডল মহান ছিল। 464 | খাদ্য এবং সেবা অনেক ভাল হতে পারে, যদিও Ambiance এবং বায়ুমণ্ডল মহান ছিল। 465 | কিভাবে don’t,আমি এই স্থানে এখনও চলমান । 466 | তাদের স্টার্লিং ট্র্যাক রেকর্ড একটি নিম্ন পয়েন্ট ছিল,যে স্বল্পমেয়াদী শেফ জেসন Narone নেভিগেশন সরানো হয়েছে, সে শুনতে খুব উত্তেজিত ছিল 467 | সেবা যদিও অবাধ্য একটি অযৌক্তিক ছিল, আমার টেবিলের ভাগ ছিল বাচ্চাদের একটি অট্ট গ্রুপের সঙ্গে 468 | সেবা যদিও অবাধ্য একটি অযৌক্তিক ছিল, আমার টেবিলের ভাগ ছিল বাচ্চাদের একটি অট্ট গ্রুপের সঙ্গে 469 | খাদ্য সাধারণত ভাল হয় কিন্তু এটি অবশ্যই একটি আরামদায়ক স্থান যেতে না হয়। 470 | আশ্চর্যজনক হতাশায় 471 | ভয়াবহ সুস্বাদু ছিল ! 472 | আপনি এখানে একটি সুস্বাদু খাবারের খরচ জন্য কাছাকাছি লেক্সিংটন এভিনিউতে যেতেন তাহলে ভারতীয় রেস্টুরেন্টের অধিকাংশ চমৎকার একটি খাবার পেতেন। 473 | বিশ্রামের জন্য কিছুই ছিল না,প্লেইন পিজা ছিল ভঙ্গুর এবং সৃজনশীল বন্য মাশরুম (তৃতীয় প্রজন্মের- ফোরনিনি) পিজা যা আমরা মাঝখানে truffle তেল দিয়ে ডুবিয়ে ছিলাম (আবার এটি ভোঁতা করা) 474 | উল্লিখিত nite omelletes এখানে ভাল মানর না,কারণ কোন বৈচিত্র নেই। 475 | পরে সব , তারা ছোট টিপ সম্পর্কে অভিযোগ করে। 476 | এই পাল্টার পিছনে, দুই পুরুষদের মধ্যে চিপানো হয় 477 | আমার স্ত্রীর সঙ্গে গিয়েছিলাম এবং আমরা একটি টেবিলের জন্য অপেক্ষায় ছিলাম, 478 | আমি সত্যিই হতাশ, পিঁপড়া সবাই সেখানে থেকে খাদ্য খেতে গ্রহণ করে না। 479 | একটি বড় $ 20, এবং toppings প্রায় $ 3 প্রতিটি হয়। 480 | আমাকে অবশ্যই ফিরে যেতে হবে না 481 | এটা যে এর মূল্য টাকার জন্য নয় 482 | অনেক মানুষ জন্য, এটি অস্থায়ী থাই খাদ্যের মত মনে নাও হতে পারে কারণ NYC বেশিরভাগ জায়গা বেশ খাঁটি না হয়। 483 | আমাকে ব্যয়বহুল বিল দিতেও সংকোচ বোধ করতো না 484 | টেবিলের পাশাপাশি আমরা আমাদের রেস্তোরাঁর প্রতিদ্বন্দ্বীদের দুইবার আগেই প্রতিশ্রুতি দিয়েছিলাম, আমরা আসলেই তিনবার অর্ডার না করায় আমাদের তিনটি অর্ডার দেওয়া হয়েছিল, বাকিটা টেবিলের বাকি বসার ২0 মিনিট পর আমরা আমাদের অর্ডারগুলির একটি পেয়েছি (এবং যে আদেশটি পুরাপুরি ছিল), এবং 45 বিলিয়ন ডলারের চেয়ে বেশি চার্জ করেছি যা আমাদের বিলের উপর ছিল। 485 | টেবিলের পাশাপাশি আমরা আমাদের রেস্তোরাঁর প্রতিদ্বন্দ্বীদের দুইবার আগেই প্রতিশ্রুতি দিয়েছিলাম, আমরা আসলেই তিনবার অর্ডার না করায় আমাদের তিনটি অর্ডার দেওয়া হয়েছিল, বাকিটা টেবিলের বাকি বসার ২0 মিনিট পর আমরা আমাদের অর্ডারগুলির একটি পেয়েছি (এবং যে আদেশটি পুরাপুরি ছিল), এবং 45 বিলিয়ন ডলারের চেয়ে বেশি চার্জ করেছি যা আমাদের বিলের উপর ছিল। 486 | এখন খাদ্য অসঙ্গত। 487 | সম্ভাবনা এটি একটি কৌতুক 488 | আমরা মনে করি এই জায়গাটি এমএসজি খাবার রান্নায় খুব বেশি ব্যবহার করেছে। 489 | টম খা স্যুপটি ছিল অনুপযুক্ত 490 | লোকেদের দূরত্ত বাড়াতে থাকে 491 | দুর্বলতা: সেবা ধীরগতির এবং তারা সেটাও দেননা! 492 | যদিও তারা ভাল রাধুণী, দাম খুব বেশী। 493 | যদি আপনি প্রতিবেশির বাইরে বসবাস করেন, বিরক্ত বোধ করবেন না! 494 | এটি খোলার সময় এখানে গিয়েছিলাম তখন মানের হ্রাস উল্লেখযোগ্যভাবে দেখেছি। 495 | এটা ব্যাংক ভাঙ্গবে না এবং আমিও খাবারের জন্য ফিরে আসব না। 496 | আমি দুইবার এই জয়ায় এসেছি এবং আমি আর কখনোই ফিরে যাব না। 497 | আমাদের তীব্রবেগে যাত্তয়া ছিল একেবারে অপ্রয়োজনীয়! 498 | যদিও,ঝরনা পানীয় উপর কোন প্রতিফলন হয়না। 499 | ক্র্যাব ক্রোভেট আমি এটাকে পছন্দ করতাম না। প্রথমবারের মতো আমি আদেশ দিয়েছিলাম এবং তারা কোনও বড় চুক্তি ছাড়াই আমার জন্য এটি পরিবর্তন করতে পেরে খুশি। 500 | এটা এত জোরে এমনকি আপনি আপনার পাশের ব্যক্তির সাথে কথা বলতে পারবেন না। 501 | রুবির খাদ্য একটি পর্যটক ফাঁদ। 502 | আমি এখানে কয়েকবার এসেছি এবং প্রভাবিত না হয়ে পারিনি। 503 | যেমন তার একটি বিশেষ বেকারি থেকে রুটি আসত আমরা যখন তার এটি ডাউনটাউন ম্যানহাটানের ক্রয় দেখেছি। 504 | যেমন তার একটি বিশেষ বেকারি থেকে রুটি আসত আমরা যখন তার এটি ডাউনটাউন ম্যানহাটানের ক্রয় দেখেছি। 505 | যাইহোক, ২003 এর গ্রীষ্মে, মনে হয় ব্যবস্থাপনাটি বদলে গেছে এবং দারুণ রোমান্টিক ব্যাকআপের দরুন গ্লাস ফ্রন্টের বড় দরজাটি স্থানান্তরিত হয়েছে। 506 | আমরা ভাল খাবেরর জন্য আর এই জায়গা যেতে হবে না। 507 | রেস্টুরেন্ট পদত্যাগ মুহূর্ত থেকে আমাদের সঙ্গে মনোরোগ চিকিত্সক ছিল! 508 | কিন্তু কখনও বেকারী অর্ডার করবেনা অন্যথায় অগভীর বড় পাত্র বা স্যান্ডউইচ মধ্যে যে বিষয়টি কোনও জায়গা থেকে নেওয়া হয়নি)সকাল থেকে ফ্রাইং করা অনেক কঠিন 509 | বিশিষ্ট Bagels, কিন্তু আপনি কিসের জন্য অর্থ প্রদান করবেন। 510 | যদি আপনি শহরে থাকেন, এটি অন্য কোন স্থান অনুসন্ধানের মূল্য। 511 | এমনকি তাদের একটি আমেরিকান চীনা খাদ্য মেনু বিভাগ আছে! 512 | অন্তত কম সেময় বলা যায় কম সময় প্রচেষ্টা, বা অর্থের মূল্য নয়। 513 | অন্তত কম সেময় বলা যায় কম সময় প্রচেষ্টা, বা অর্থের মূল্য নয়। 514 | আমাদের পরিকল্পনা ছিল মিষ্টান্ন অর্ডারের কিন্তু ওয়েটার বিল নিয়ে আসে অর্ডার পরিবত্তন করার আগেই 515 | তাদের রান্না করা শেষ এবং পনির প্রায় অ বিদ্যমান ছিল। 516 | Svc একটি বিট অদ্ভুত হতে পারে সময়ে, esp যদি আপনার বড় গোষ্ঠী আছে, কিন্তু সামগ্রিক রেস্টুরেন্ট অবশ্যই আবশ্যক! 517 | দুইবার ওয়েটার দ্বারা টি চেষ্টা করার পরে (আমরা এখনো এটির দিকে তাকাইনি, আমাদের এখনও পূর্ণ বিয়ার আছে), ম্যানেজার এসেছিলেন এবং আমাদের বলেছিলেন যে রিজার্ভেশন সহ অন্যান্য লোকজনের জন্য টেবিল প্রয়োজন। 518 | ডিনারের জন্য এটা সুপারিশ করবে না! 519 | সসে জল ছিল এবং খাবারে তেমন স্বাদ ছিল না। 520 | তারপর যখন আমি আমার প্রধান কোর্সের জন্য দ্বিতীয় গ্লাস ওয়াইন অর্ডার করার চেষ্টা করি প্রথমে ভুলবশত অন্য রুটি ,পানীয় বেরিয়ে আসে 521 | তারা বিশেষ বা নতুন উপাদানের উপর জোর দিতে পারে না যা আমার ভালো থাইর জন্য প্রয়োজনীয়। 522 | গড়ে আপনার ব্যাগেল স্থান থেকে একটু বেশি ব্যয়বহু 523 | খাদ্য রাননারত ছিল- সসে জল, এবং সবজি কাঁচা ছিল। 524 | সস ব্যবহৃত ছিল আর তেমন মজাদার ছিলনা 525 | চাল ছিল দরিদ্র মানের এবং তাই রান্না খুব খারাপভাবে হয়েছিল ,এটি ছিল কঠিন 526 | আমি অন্তত আশ্চর্যজনক ভাবে বলতে চাই সাফল্য খুঁজে পেতে প্রচেষ্টা এবং অভ্যাস মূল্যবান । 527 | খুব সীমিত আসন আছে এবং ঠিক সময়ে খাদ্য পাওয়ার জন্য যথেষ্ট অপেক্ষা করতে হবে। 528 | খুব সীমিত আসন আছে এবং ঠিক সময়ে খাদ্য পাওয়ার জন্য যথেষ্ট অপেক্ষা করতে হবে। 529 | না ধন্যবাদ!!! 530 | চারদিকে শুধু হতাশা 531 | বিনামূল্যে কোনও পানীয় নেই 532 | নিশ্চিতভাবে এটি উচ্চতম সুপারিশ না 533 | স্থানটি মজা করার মত নয় , তবে পানীয়গুলি অনন্য এবং মাতাল হত্তয়ার জন্য যথেষ্ণট 534 | যদি আপনি কিছু টাকা সংরক্ষণ করতে চান, এখানে যাবেন না। 535 | আমার সঙ্গে বৃহদাকার সামুদ্রিক মাছ ছিল (মসলাযুক্ত এবং খুব মজর , আমি একজন বড় ভোজক ছিলাম এবং শুধুমাত্র অর্ধেক খেতে পারছি ) যখন আমার প্রেমিক অতুলনীয় মাছ এবং চিপস (আবার, একটি বড় পরিবেশন - অন্তত 5 টুকরা মাছ এবং একটি basketful ভাজা).পরিবেশন করত 536 | এটি প্রথমবারের মতো দাবীটিকে সঠিক বলে মনে হয়নি 537 | তোমাকে কুলারীর কাছে যেতে হবে। 538 | এনওয়াইতে সেরা তাইওয়ানি খাবার! 539 | তারা শুষ্ক এবং জঘণ্য ছিল, আমি এমনকি আমার প্রথম টুকরা শেষ করতে পারিনি। 540 | অবশেষে আমরা হেসেছি যখন সে আমাদের মিষটির প্রসতাব অর্পিত করেছিল এবং 10 শতাংশ ছার ছিল , আমি মনেকরি এটা ভালই ছিল 541 | এবং আপনি কি চান সব কিছুই উচচ দামের 542 | কর্মীরা আমার বন্ধুদের উপেক্ষা করে এবং আমি সেখানেই ছিলাম পুরো সময়। 543 | তবুও এই ধরনের অশোভন সেবার সঙ্গে যুক্ত, সেখানে যে কোন ধরনের আগ্রহী কথোপকথন বহন কািরর জন্য সুপারিশ করবে। 544 | আমার অন্তত তিনটি তালিকা পূর্ণ করতে হবে, এবং এটাই অন্তত 14 টাকা লাগবে 545 | যে কেউ একটি থাই রেস্টুরেন্টে ভোজন করার জন্য একটি বিশাল হতাশা নিয়ে যায় 546 | হট ডগ মাঝখানে ঠান্ডা ছিল এবং পোঁদ বদ্ধ ছিল 547 | আমি এই জায়গার খারাপ পর্যালোচনা পড়ে খুব দু: খিত হয়েছিলা 548 | এই জায়গা এড়িয়ে চলুন! 549 | সেখানের খাদ্য আমি যতটা পছন্দ করি , আমি নিজেকে ফিরে আনতে পাড়ব না। 550 | এটি কাঁটাতারের মতো, আংশিকভাবে তৈরি পনির মত লাগছিল - এখনও রেখাচিত্রমালার মধ্যে 551 | এক মাস আগে একটি দর্শনের উপর ভিত্তি করে, আমি ক্রিসমাসেষ আগের সপ্তাহে ফিরি এবং অতিশয় হতাশ ছিলাম। 552 | খাদ্য নয়, পরিবেশে নয়, সেবা নয়, পূর্ববর্তী পর্যালোচনাগুলির সাথে আমি একমত যে অপেক্ষা করতে করতে , অপেক্ষামান কর্মীরা খুব অবাধ্য এবং আপনি যখন পারবেন তখন তারা আপনাকে সঠিকভাবে খুঁজে পেতে চায়। 553 | ঠান্ডা পিজা বিতরণ করা হয় এবং এমনকি পনির সম্পূর্ণরূপে গলিত ছিল না! 554 | না টারাং, সান্ত্বনা এবং সাজসজ্জার সম্পূর্ণ অভাব হচ্ছে এর জন্য খুব রাগ হচ্ছে, কর্মীরা অতি ধীরে ধীরে এবং ভয়ানক দ্রুত খাবার দিচছে , আমার কখনও হয়েছে এক সেরা ভিয়েতনামী রেস্টুরেন্টে । ফো সুস্বাদু এবং খুব তাজা শাক সবজি সঙ্গে নিয়ে আসে। 555 | না টারাং, সান্ত্বনা এবং সাজসজ্জার সম্পূর্ণ অভাব হচ্ছে এর জন্য খুব রাগ হচ্ছে, কর্মীরা অতি ধীরে ধীরে এবং ভয়ানক দ্রুত খাবার দিচছে , আমার কখনও হয়েছে এক সেরা ভিয়েতনামী রেস্টুরেন্টে । ফো সুস্বাদু এবং খুব তাজা শাক সবজি সঙ্গে নিয়ে আসে। 556 | অন্যদিকে, আপনি যদি সহজেই বোকা না হতে চান, আপনি শত শত রেস্তোরাঁ পাবেন যা আপনাকে অ্যালেন ডুকাসের সমতুল্য সেবা এবং আবহ প্রদান করবে এবং গুণগত মানের পছন্দের সুস্বাদু, খাদ্য, সঠিক পরিমাণে খাওয়ানো হবে। 557 | যদিও আমি মানুষকে এই জায়গাগুলির দাম জানিয়ে দেই তবে বাইরের তালিকা বন্ধ হবে - দুর্ভাগ্যবশত - দুঃখিত, - NYC- এর পিজা সেরা নয়। 558 | অংশগুলি এখন খুব ছোট,চাট্নিগুলির অতিশয় উচ্চাকাঙ্ক্ষী জনপ্রিয়তার কারণে রেস্টুরেন্ট এখনও ভাল, - সাধারণত অখাদ্যের, পরিষেবাটি , , ক্ষতিকারক মনে হয়। 559 | UWS তে অনেক ভাল রেস্টুরেন্ট আছে , আমার অত্যধিক খাদ্যের প্রয়োজন নেই, অপেক্ষাকৃত অহংকারী কর্মচারী যারা রাতের খাবারের মহিমান্বিতা জানেনা ,অবিচক্ষণ সেবা এবং ব্যবস্থাপনার কোনও যত্ন নেয় না। 560 | UWS তে অনেক ভাল রেস্টুরেন্ট আছে , আমার অত্যধিক খাদ্যের প্রয়োজন নেই, অপেক্ষাকৃত অহংকারী কর্মচারী যারা রাতের খাবারের মহিমান্বিতা জানেনা ,অবিচক্ষণ সেবা এবং ব্যবস্থাপনার কোনও যত্ন নেয় না। 561 | UWS তে অনেক ভাল রেস্টুরেন্ট আছে , আমার অত্যধিক খাদ্যের প্রয়োজন নেই, অপেক্ষাকৃত অহংকারী কর্মচারী যারা রাতের খাবারের মহিমান্বিতা জানেনা ,অবিচক্ষণ সেবা এবং ব্যবস্থাপনার কোনও যত্ন নেয় না। 562 | এই সময়ে পরিষেবাটি একটু খেপা, কিন্তু যখন খাবার আসে তখন সকলকে ক্ষমা করা হয়। 563 | যদি আপনার প্রিয় খাবার চীনা জেনারেল টাও মুরগির হয়, তাহলে এটি আপনার স্থান নয়। 564 | যদিওস্যুট পরিহিত ,তার পরও আপনি আরামদায়ক আরামদায়ক মনে করবেন না। 565 | ওয়েটার সম্পূর্ণভাবে পানীয় দিতে ভুলে যায়, খাবারের পরিন এত কম হয়, দুইজন লোক এক ঘরের মধ্যে কষ্ট করেভাগাভাগি করতে 566 | ওয়েটার সম্পূর্ণভাবে পানীয় দিতে ভুলে যায়, খাবারের পরিন এত কম হয়, দুইজন লোক এক ঘরের মধ্যে কষ্ট করেভাগাভাগি করতে 567 | আমি এটা ঘৃণা করি. 568 | কিন্তু আমার স্ত্রী এবং আমার যে জিনিস বেশি খারাপ লেগেছিল এটি ভীষন জোরে ছিল এবং এটা 'গরাদ বা 'মদের দোকান এর'মতই 569 | মূল্য উচ্চ মধ্যবির্তের নাগালে ছিল । 570 | আপনি যদি নিউ ইয়র্কে শহরে বাস করেন, তবে আপনি অর্ধেক দামে টাইম square এর বাইরে ছোট রেস্টুরেন্টগুলিতে ভাল খাবার পাবেন । 571 | আপনি যদি নিউ ইয়র্কে শহরে বাস করেন, তবে আপনি অর্ধেক দামে টাইম square এর বাইরে ছোট রেস্টুরেন্টগুলিতে ভাল খাবার পাবেন । 572 | তাই আমার স্বামী একটি অজুহাত তৈরি করে আমাকে ছেড়ে যেতে পারেন 573 | আমি জানি না তারা কারা, কিন্তু তারা আশেপাশের বাসিন্দাদের প্রতি কোন সম্মান রাখে না যেহেতু তারা তাদের সরাইখানার দরজা খুলেছে এবং গ্রীষ্মকালে প্রতি সপ্তাহে সকালে বিস্ফোরণের মত জোরে গান করে। 574 | আমি জানি না তারা কারা, কিন্তু তারা আশেপাশের বাসিন্দাদের প্রতি কোন সম্মান রাখে না যেহেতু তারা তাদের সরাইখানার দরজা খুলেছে এবং গ্রীষ্মকালে প্রতি সপ্তাহে সকালে বিস্ফোরণের মত জোরে গান করে। 575 | আমি যদি টাকা দিতে না পারতাম তবে আমাকে আবার ফিরে যেতে হত। 576 | আমার বন্ধুর খাদ্যের স্বাদ এর সম্পূর্ণ বিপরীত ছিল,এছাড়াও এটি দেখতেও । 577 | আমি বুনো আপেল মদ্যের মিশ্রণ আনতে বলেছিলাম এবং এটি একটি লেবু রস নিষিক্ত ছিল যেখানে আপননি লেবুর স্বাদ পেতে পারেন । 578 | আমার টার্কি বার্গার মোটেই রান্না করা হয়নি, আমার বন্ধুর স্যামন সম্পূর্ণরূপে কাঁচা ছিল। 579 | আমাদের যে কোন জায়গায় বসতে বলেছিলেন, এবং যখন আমরা বসেছিলাম তখন টেবিলটি সংরক্ষিত ছিল বলে জানান। 580 | যদিও আমাদের জন্য শুধু মুরগি ছিল না,। 581 | এই জায়গা অবিশ্বাস্যভাবে ক্ষুদ্র। 582 | প্রকৃতপক্ষে (সম্ভাব্য সর্বাধিক রাতের খাবার ) তারা এখনও ফোন রিজার্ভেশন গ্রহণ এবং লবির মধ্যে যারা টেবিলএ অপেক্ষা করছিল তাদের জন্য পুনরায় বরাদ্দকরেছে। 583 | এই জায়গাটি ভীশন খারাপ। 584 | আমি অনুজ্বলবসত্ুর জন্য বেশ কয়েকটি জায়গায় গিয়েছিছ এবং এটি সবচেয়ে খারাপ হতে চলেছে। 585 | আমি অনুজ্বলবসত্ুর জন্য বেশ কয়েকটি জায়গায় গিয়েছিছ এবং এটি সবচেয়ে খারাপ হতে চলেছে। 586 | রাতের খাবারের সময় প্রায় 4 ঘন্টা লেগেছিল কোনও সময়ের ব্যবধানে ছাড়াই। 587 | রেস্টুরেন্টের লোকেরা বেশ অপ্রীতিকর এবং উওেজিত। 588 | স্যান্ডউইচ শুষ্ক,সাদহীন এবং অত্যধিক প্রসারিত। 589 | স্যান্ডউইচ শুষ্ক,সাদহীন এবং অত্যধিক প্রসারিত। 590 | আমার ডাইনিং এর অভিজ্ঞতা অসুবিধার তৈরি করে 591 | , আমাদের পাশের টেবিল থেকে এখনও দূরে ,আমার টেবিল থেকে যাওয়ার পর এবং অন্যরা দোশুনা করছিল এমনকি তারা অনেক বড় ছিল 592 | আমি 7 এর একটি দল (ঘনিষ্ঠ কিন্তু আওিও না ) ছিল এবং আমরা আমাদের কোট পর অবসথায় খেয়ে ছিলাম। 593 | আমি এই রেস্টুরেন্টের জন্য খুব হতাশ ছিলাম। 594 | একটি গ্লাস জল আমাদের টেবিল দেওয়া হয় যার ঠক্ঠক্ শব্দএবং চেকের উপর এই রন্ধনসম্পর্কীয় দুঃস্বপ্নের উপসংহার । 595 | একটি গ্লাস জল আমাদের টেবিল দেওয়া হয় যার ঠক্ঠক্ শব্দএবং চেকের উপর এই রন্ধনসম্পর্কীয় দুঃস্বপ্নের উপসংহার 596 | জ্যাজ রাতে এটা অট্ট এবং তীক্ষ্ন হতে পারে, একটি বিট খুব ছোট লাইভ সঙ্গীতের স্থানের জন্য । 597 | আসবে না ফিরে। 598 | ছোট, ডেজার্ট অনুপ্রাণিত হয় না,Entree ছিল নরম । 599 | ওহ পরিবারের জন্য এটি খুব ছোট এবং strollers সঙ্গেও। 600 | এটি মহা মূল্যবান সুস্বাদু খাদ্য কিন্তু একটি ঠান্ডা দিনে এখানে যান এবং দরজার সামনে বসবেন না। 601 | পিজাটা একটু আদ্র্র ছিল। 602 | সিঙ্গাপুরেমাই ফ্যানের কোনও কৌতুক ছিল না। 603 | একমাত্র সমস্যা হল ম্যানেজার সম্পূর্ণ অসম্পূর্ণ। 604 | মারে এটা করবেন না 605 | আমি এখনও পাগল যে আমাকে এই বাজে খাদ্যর জন্য টাকা হয়েছিল 606 | পরিমিত থাই খাদ্য - যদিও একটি নরম টুকরা - সামান্য ঘুরা ফিরা, কিন্তু সেবা ভাল । 607 | বেশিরভাগ লোকই খাওয়াতে পছন্দ করেন আপেল পূর্ব দিকের উন্নাসিক লোক, তাই সতর্ক থাকুন। 608 | ওয়েটার আসলে আমার হাত উপর জল ঢেলে এবং চলে গেছে। 609 | সব থেকে খারাপ, ভুলক্রমে 60 টকার জায়গায় আমাদের 80 টাকা বিল যোগ করা হয়েছে। 610 | খুব ঠান্ডা ভাবে উপভোগ কর 611 | এই মূল্যে সুশিতে দর্শনীয় কিছু ছিল না। 612 | কিন্তু তাদের একটি টোস্ট করার বৈদু্যতিক যন্ত্র ছিলনা যা অদ্ভুত। 613 | তাই, ভাল খাবারের জন্য আমিসুপারিশ করতাম, কিন্তু এটা রাতের জন্য মজার নয়। 614 | ক্ষুধাবর্ধক বস্তু ঠিক আছে এবং প্রধান কোর্স নিরবচ্ছিন্নভাবে গড় স্তরের নিচে ছিল। 615 | অন্য কেউ মিষ্টান্ন চেয়েছিল - এছাড়াও আমাদের এটা বাকি ছিল। 616 | আপনি যদি একজন নিরামিষ ভোজি হন, এটি সত্যিই আপনার জন্যএকটি ভাল জায়গা না । 617 | এটা স্বাভাবিকের চেয়ে বেশি ছিল না এবং গরুর মাংসের দাম সস্তা ছিল (নিচের গুঁড়ো) গরুর মাংস। 618 | লেবু ছাড়া ক্লাব সোডা, বরফে ভরাট, লেবু ছাড়া। 619 | এই জায়গা নির্মাণের জন্য মালিকদের খরচ বহন করতে হবে। 620 | শেফ এবং খাদ্য পরিবেশিকার জ্ঞান খুব কম। 621 | শেফ এবং খাদ্য পরিবেশিকার জ্ঞান খুব কম। 622 | হতাশাদায়ক খাদ্য, অকথিত সেবা 623 | হতাশাদায়ক খাদ্য, অকথিত সেবা 624 | ছোট অংশ এবং মূল্য বেশি । 625 | ছোট অংশ এবং মূল্য বেশি । 626 | দ্বিতীয়বারের মতো আমার পাদদেশে, আমার দিকে তাকাতে লাগলো যাতে আলোকে সামঞ্জস্য করতে পারি। 627 | আমার স্বামী বলেছিলেন যে অংশটি খুব ছোট ছিল, কিন্তু যদিও আমার প্রধান কোর্সটি ভাগ করা হয়েছিল তবে এটা আমার জন্য ভাল । 628 | কিন্তু থাই অবশ্যই স্পষ্টভাবে মহান নয় - নমনীয় এবং অবিভাজিত। 629 | যদিও খাদ্য ভাল ছিল (অবশ্যই কোন Il Mulino) পরিবেষনা ছিল বিশ্রী।। 630 | আপনি যে পরিষেবা আশা করেন এই মূল্যে একটি যৌথ বিভাগে থেকে তা দেয়া হয় না। 631 | খাবারটি খুবই ব্যয়বহুল ছিল (আমরা দুপুরের খাবার জন্য 160 ডলার খরচ করেছি) কিন্তু অত্যন্ত সুস্বাদু 632 | আমি মনে করি না যে আমাকে আবার যেতে হবে। 633 | আমি প্রায়ই আমার পরিবারের সাথে সেখানে খেতে যাই 634 | আমার জন্য কোন পিজা 33! 635 | বলার অপেক্ষা রাখে না, আমি কখনোই ফিরে যাব না এবং আপনাকেও সতর্ক থাকতে হবে। 636 | কিছু সার্ভার আপনাকে মনে করেন যে আপনি খাদ্য আনতে পক্ষপাত করছেন। 637 | ফাস্ট ফুড জয়েন্টগুলোতে একটি চমৎকার বিকল্প এবং ক্রম কিন্তু, খাদ্য ছিল সামান্য হতাশাজনক। 638 | এটি একটি সমস্যা যেহেতু আমরা প্রায় 20 টাকায় একটি ডিশের জন্য দিয়েছি, এবং একটি সুস্বাদু স্বাদ পেতে 5 টি খাবারের অর্ডার দিতে হয়েছিল। 639 | এটি একটি সমস্যা যেহেতু আমরা প্রায় 20 টাকায় একটি ডিশের জন্য দিয়েছি, এবং একটি সুস্বাদু স্বাদ পেতে 5 টি খাবারের অর্ডার দিতে হয়েছিল। 640 | তারা যেমন প্রতারক ছিল ( ভাপে রাঁধাচারটি ছোট মাংসের চপ জন্য $8.95 ) এবং চেষ্টা করার যোগ্য না। 641 | তারা যেমন প্রতারক ছিল ( ভাপে রাঁধাচারটি ছোট মাংসের চপ জন্য $8.95 ) এবং চেষ্টা করার যোগ্য না। 642 | প্রথমে জায়গাটি খুঁজে পেতে এটি আমাদের কাছে দীর্ঘ সময় নেয় 643 | এটি খাদ্য এবং আবহ সম্পর্কে, এবং কিভাবে এটি ভয়ঙ্কর হবে শুধুমাত্র একটি নিষ্ক্রিয় ইঞ্জিন দাড়া আমরা কল্পনা করতে পারি । 644 | এটি খাদ্য এবং আবহ সম্পর্কে, এবং কিভাবে এটি ভয়ঙ্কর হবে শুধুমাত্র একটি নিষ্ক্রিয় ইঞ্জিন দাড়া আমরা কল্পনা করতে পারি । 645 | অবিলম্বে আমরা মূল্য পরিশোধ করার পর, ওয়েটার টাকা নিয়ে গেল এবং বলল, ঠিক আছে, আপনার এখানে থাকতে পারেন। 646 | মেনুতে ওয়েবসাইটের মত কিছুই নেই। 647 | আমি একটি কৌতুকের ভৃত্যকে জিজ্ঞেস করলাম, একটি লোটাস পাতার চালে আবৃত এবং সে রাতে জবাব দিলো এবং শুধু দূরে গিয়েছিলা 648 | এসইএ এত জনপ্রিয় হয়ে উঠেছে যে তারা তাদের মাথায় যেতে দিয়েছে। 649 | এটা মূল্যবান নয় 650 | গাড়ী ছাড়া যাওয়া কিছুটা ঝামেলার (যখন আমি ইনউইড এ বাস করতাম)। 651 | আপনার সময়, বা অর্থ অপচয় করবেন না !! 652 | তারা গ্রাহকের স্বাস্থ্যের প্রতি বেশি মনোযোগী না, শুধু অর্থ উপার্জন করতে চায় 653 | আমরা আমাদের আলাপটি বহন করতে পারিনি কারণ আমরা ওয়েট্রেস এবং চাকরদের নিয়মিতভাবে বাধা দিয়েছিলাম এবং নির্দেশ দিয়েছি যে আমরা খুব বেশি সময় কাটিয়েছি - আশ্চর্যজনক, আমরা কেবল বসে ছিলাম। 654 | আমরা শুধু কাইতেখেয়েছি এবং হতাশ হয়েছি। 655 | এটি এমন ব্যক্তিদের জন্য একটি জায়গা যেখানে মধ্যস্বত্বভোগী খাবারের জন্য তরা প্রচুর পরিমাণে অর্থ প্রদান করে,শব্দ এবং একটি সুযোগ রয়েছে সেতু এবং সুড়ঙ্গপথের সহকর্মী লোকজনের 656 | এটি এমন ব্যক্তিদের জন্য একটি জায়গা যেখানে মধ্যস্বত্বভোগী খাবারের জন্য তরা প্রচুর পরিমাণে অর্থ প্রদান করে,শব্দ এবং একটি সুযোগ রয়েছে সেতু এবং সুড়ঙ্গপথের সহকর্মী লোকজনের 657 | চিকেন ডিশ সম্পর্কে অভিযোগ করার পর, ম্যানেজার আমাদের কাছে এসে জানায় যে, কেউ আগে কখনও অভিযোগ করেনি, এবং আমরা জানি না যে খাবারটির কেমন চর্চা করা উচিত ছিল। 658 | চিকেন ডিশ সম্পর্কে অভিযোগ করার পর, ম্যানেজার আমাদের কাছে এসে জানায় যে, কেউ আগে কখনও অভিযোগ করেনি, এবং আমরা জানি না যে খাবারটির কেমন চর্চা করা উচিত ছিল। 659 | আমি সব প্রতারণা বুঝতে পারছি না ... 660 | বার্টারেন্ডার বারে তার বন্ধুদের কাছ থেকে নিজেকে বিচ্ছিন্ন করতে পারেনি। 661 | বরং রাস্তায় ঘুরে তমারির কাছে যাও 662 | আপনি কি মনে করেন যে কখনও মন দিয়ে কারো সঙ্গে কোন কথোপকথন করতে পারেন। 663 | আমর পক্ষে এটা সমভব না। 664 | তারা মুরগির শেষভাগ নিয়েছে তাই মনে হচছে , তেল ঢেলে দিয়েছে এবং মরিচ . গুঁড়ো করে দিয়েছে (সস এলার্ঞ্জেন্ট এবং লাল)। 665 | আমরা মনে করি আমরা একটি ক্ষমা বা প্রশংসাসূচক পানীয় পেতে চাই - এর পরিবর্তে, আমরা একটি snobby ওয়েটার পেয়েছিলাম এমনকি 15 মিনিটের বেশি আমাদের অর্ডার নিতে সময় নেয় নিন এবং তাই আমরা তাকে জিজ্ঞাসা করলে আমাদের ঠোঁটে দেওয়া হবে। 666 | তারা চশমা এবং বোতল এনে ছিল, এবং আমাদের টেবিলে শুধু বোতলটি রেখে গেছে। 667 | আমরা আসলে 10% টিপ দিয়েছি (যা আমরা মধ্যমমানের আহার ও পরিষেবা সত্ত্বেও কখনও করি নি),এই কারণে যে আমরা সম্পূর্ণভাবে অনুভব করেছি , 668 | আমরা খাদ্য উপভোগ করার সময়,অত্যন্ত হতাশ ছিলাম দুবল পরিষেবার কারনে (ওয়েটার বেশ সক্ষম ছিল না এবং ধীর সেবা) এবং অনুতাপের অভাব 669 | এর জন্য আমাকে আবার তাদের পৃষ্ঠপোষকতা করতে হবে না। 670 | এই জায়গা হতে দূরে থাকুন 671 | যথাযত মূল্য নয় 672 | নিজেকে হতাশা থেকে বের করুন 673 | সুস্বাদু কিন্তু ব্যয়বহুল 674 | তারা গন্ধ মত তারা তাদের পুরাতন ক্যানড সবজি মত স্পাইনাশ মাশরুম calzone পেয়েছে 675 | কিন্তু যাই হোক না কেন দামটা সম্পর্কে দ্বিগুণ উচ্চ হয় 676 | আমি এলাকার তুলনায় অপেক্ষাকৃত নতুন এবং ২ য় বেলালকে বাছাই করার চেষ্টা করেছি এবং পরিষেবাটি নিয়ে হতাশ হয়েছি এবং আমি ভাবলাম মূল্যবান দিক দিয়ে খাদ্যটি ওভার করো। 677 | আমি এলাকার তুলনায় অপেক্ষাকৃত নতুন এবং ২ য় বেলালকে বাছাই করার চেষ্টা করেছি এবং পরিষেবাটি নিয়ে হতাশ হয়েছি এবং আমি ভাবলাম মূল্যবান দিক দিয়ে খাদ্যটি ওভার করো। 678 | আমি এলাকার তুলনায় অপেক্ষাকৃত নতুন এবং ২ য় বেলালকে বাছাই করার চেষ্টা করেছি এবং পরিষেবাটি নিয়ে হতাশ হয়েছি এবং আমি ভাবলাম মূল্যবান দিক দিয়ে খাদ্যটি ওভার করো। 679 | এই রেস্টুরেন্টে আমাদের সবচেয়ে অপ্রীতিকর অভিজ্ঞতা ছিল। 680 | আমি একটি সীট খুঁজে পেতে উদ্বিগ্ন হতে চাই না,শুধুমাত্র অভিযোগ হবে যে 1২ ডলারের গড় খরচ $ 15- $ 15 হবে 681 | আমি একটি সীট খুঁজে পেতে উদ্বিগ্ন হতে চাই না,শুধুমাত্র অভিযোগ হবে যে 1২ ডলারের গড় খরচ $ 15- $ 15 হবে 682 | 57 তম ট্র্যাফিকের চেয়ে বেশি কথা বলতে চেষ্টা করার সময়, বা রোম্যান্সের এডিটর এর ধারণা করার পরবর্তী সময় টেবিলের সাথে কথোপকথন ভাগ করে নিতে হবে। 683 | এটি সামঞ্জস্যপূর্ণ নয়। 684 | কিন্তু এই পিষ্টকটি কেকিং ছিল না: একটি তিরামিসু যা কখনো কখনো আমার মতো ছিল না। 685 | তিনি উপর করা অভিনয় করেছেন,পানীয় আপ screwed,। 686 | উপায় কিন্তু,ব্যয়বহুল পিজার 687 | যাইহোক, লন্ডন থেকে আমার সহকর্মী ছাদে একটি খুব বড় জলবায়ু লক্ষ্য করলো, যখন না আমি আগে একটি কাজ ডিনার জন্য সেখানে ছিলাম । 688 | আমার নীল এবং তৈলাক্ত চুপি মজা সত্যিই দেখতে সুন্দর ছিল । 689 | আমরা লক্ষ্য করলাম যে,টেবিল কি পানের পরিবর্তে নানকে দেখেছিল, । 690 | পনির ভাল ছিল,পরের বাড়ির grilled এর মধ্যে । 691 | তারা বাইরে থেকে ঠান্ডা বাতাস বন্ধ করে দেয় না,যদিও লাল স্লাইডিং দরজাগুলি অনন্য হয়। 692 | প্রতিটি কামড় মূল্য কিন্তু খাদ্য ব্যয়বহুল, । 693 | কখনও কখনও আমি খারাপ খাদ্য এবং খারাপ সেবা পেতে পারেন, কখনও কখনও আমি ভাল এবং খারাপ সেবা পেতে পারেন 694 | যখন আমরা অবশেষে আমাদের ভেতরে এসে বসেছিলাম, তখন আমাদের অর্ডারের চেকের জন্য দ্বিগুণ 695 | যখন আমরা অবশেষে আমাদের ভেতরে এসে বসেছিলাম, তখন আমাদের অর্ডারের চেকের জন্য দ্বিগুণ 696 | প্রায় বার বার আমরা জন্য অপেক্ষা করতে হবে 697 | তাদের সব সময় বিভিন্ন চার্জের দাম । 698 | আমার 48 তম Pongsri সঙ্গে প্রেম ছিল, কিন্তু Suan এর তুলনায় এটা পরিষেবাতে ধীরে এবং overpriced হয়। 699 | আমার 48 তম Pongsri সঙ্গে প্রেম ছিল, কিন্তু Suan এর তুলনায় এটা পরিষেবাতে ধীরে এবং overpriced হয়। 700 | এটা স্পষ্ট যে রেস্টুরেন্টে কোনও কোনও জাপানি খাবারের সাথে কোনও ধারণা বা অভিজ্ঞতা আছে। 701 | অন্য থাই রেস্তোরাঁতে অনুরূপ তুলনায় কিভাবে একটি নির্দিষ্ট ডিশ প্রস্তুত করা হয় তার সম্পর্কে জিজ্ঞাসা করা হলে তিনি বলেন, এটি ম্যাকডোনাল্ড নয়, প্রত্যেকটি জায়গা জিনিসগুলিকে আলাদা করে রাখে যদিও প্রতিটি জায়গা প্রকৃতপক্ষে ভিন্ন হয়, তবে অনিশ্চিত হওয়ার প্রয়োজন নেই গ্রাহকদের এবং নির্লজ্জ অদ্ভুত। 702 | অন্য থাই রেস্তোরাঁতে অনুরূপ তুলনায় কিভাবে একটি নির্দিষ্ট ডিশ প্রস্তুত করা হয় তার সম্পর্কে জিজ্ঞাসা করা হলে তিনি বলেন, এটি ম্যাকডোনাল্ড নয়, প্রত্যেকটি জায়গা জিনিসগুলিকে আলাদা করে রাখে যদিও প্রতিটি জায়গা প্রকৃতপক্ষে ভিন্ন হয়, তবে অনিশ্চিত হওয়ার প্রয়োজন নেই গ্রাহকদের এবং নির্লজ্জ অদ্ভুত। 703 | যদিও নিচে বসতে আশা করবেন না, শুধুমাত্র কয়েকটি টেবিল আছে এবং তারা সবসময় পূর্ণ। 704 | ম্যানেজার দাবি করেন যে তিনি বিলটির ব্যাপারে আমাদের কোনও ক্ষতিপূরণ দিতে পারেন না, যা সমগ্র গোষ্ঠীর কাছ থেকে নমনীয়তার অভাব দেখায়। 705 | পূর্ব কিন্তু খুব দূরে 706 | কিন্তু যখন আমরা মেনুতে তাকালাম,তাদের অধিকাংশই অ্যাচিটিজার বিভাগে ডাম্পলিং ছিল সেখানে অনেকগুলি বিকল্প ছিল না, । 707 | হয়তো আমি বলি কারণ এটি এমন মানুষদের জন্য প্রতিশ্রুতিবদ্ধ যারা ড্যারিটি ক্লোজিং ইহুদি ডেলি খাবার পছন্দ করে, কিন্তু খারাপভাবে চালানো এবং ভয়াবহ হতে চলেছে। 708 | যদি তারা এখন কেবল টাস্টার পেতে পারে 709 | এটি UWS সেরা পাই,অপেক্ষা করুন কর্মী আপনার ব্যবসা নির্লিপ্তভাবে অগ্রহণযোগ্য 710 | আপনি বিরক্ত করতে চান না, ইতিমধ্যে আশেপাশে এবং আপনি একটি ভাল জায়গা জন্য দূরে যাচ্ছেন 711 | সব হিপ বা ঘটছে না,সজ্জা সত্যিই blah. 712 | এটি দেখায় যে,এটি মালিকের প্রথম উদ্যোগ বলে মনে করা হয়। 713 | আমরা মেনু থাই অধ্যায় থেকে কিছু গরুর মাংস এবং নুডল স্যুপ খাবারের আদেশ করেছিলাম কিন্তু আমরা কিছু থাই পেয়েছিলাম 714 | আমি কখনও জাপানি খাদ্যের জন্য খারাপ অজুহাত সম্মুখীন হয়েছে। 715 | শহরে যাওয়ার জন্য এক মিলিয়ন ভাল জায়গা। 716 | ঠিক আছে, এটি ছিল খুবই নমনীয়- আমি তৈলাক্ত অংশকে মনে করি না (কারণ অধিকাংশই সেইভাবে রান্না হয়) । 717 | আমি একটি চিকেন Teriyaki থালার আদেশ করি,মুরগির অত্যন্ত শুষ্ক ছিল যা খাওয়া যায় নি,। 718 | আমরা 9pm এ রিজার্ভ পর্যন্ত ছিলাম, কিন্তু 10:15 PM তে পোস্ট করা পর্যন্ত পারি নাই। 719 | আমরা 9pm এ রিজার্ভ পর্যন্ত ছিলাম, কিন্তু 10:15 PM তে পোস্ট করা পর্যন্ত পারি নাই। 720 | এমন অস্থির সেবা জন্য কোন অজুহাত নেই 721 | এই রেস্টুরেন্টটি বাইরে,তিনটি স্ট্রাইক। 722 | কিন্তু সবকিছু সুস্বাদু ছিল,সামগ্রিকভাবে রেস্টুরেন্টটি আমাদের অন্যান্য সুশি প্রিয় এবং ব্যয়বহুল ছিল। 723 | মদ কাচের দ্বারা যথেষ্ট না। 724 | আমি এটা খাদ্য জন্য একটু দামি বলতে হবে কারণ এটি ভিউ হিসাবে হিসাবে দর্শনীয় ছিল না। 725 | রেস্টুরেন্টের পিছনের অর্ধেকের মধ্যে সীট বসাবেন না,আমি দেখেছি যে একজন মহিলা সেখানে বসে 40times বসেছিল 726 | এক খাবারের জন্য ভাগ্যবান স্ট্রাইকের কাছে যাওয়া উচিত নয়। 727 | এই পরিষেবাটি ভয়ঙ্কর - শেষ বার আমি সেখানে ছিলাম (এবং আমি শেষবার বলতে চাইছি) আমাদের বলা হয়েছিল যে আমাদের টেবিলের প্রয়োজন আছে তাই আমাদের ছেড়ে যেতে হবে। 728 | আমরা একটি টেবিলের জন্য অর্ধেকেরও বেশি সময় অপেক্ষা করতাম (যদিও আমরা রিজার্ভেশন ছিলাম)। 729 | আমি রিজার্ভেশন করার চেষ্টা করেছি কিন্তু বলা হয়েছিল যে তারা সপ্তাহান্ বন্ধ ছিল,শেষ স্মারক দিন ছিল, (আকর্ষণীয়, কিন্তু ...)। 730 | আমি রিজার্ভেশন করার চেষ্টা করেছি কিন্তু বলা হয়েছিল যে তারা সপ্তাহান্ বন্ধ ছিল,শেষ স্মারক দিন ছিল, (আকর্ষণীয়, কিন্তু ...)। 731 | রাতের বেলায়,আপনাথের নিজের কথোপকথন শুনতে একেবারেই কঠিন, একই রকম বিলাসিতা প্রতিযোগিতার সাথে - ব্যাকগ্রাউন্ডে চলমান সঙ্গীতটিও ভাসমান। 732 | এটা শুধু থাই নয় 733 | আমি 4 গ্লাস জল পান করতে পারি এবং এখনও শুকিয়ে গেছি - তাই সতর্ক থাকুন। 734 | প্লাস্টিকের ফর্কগুলি অন্তর্ভুক্ত ছিল না এবং পিটারকে হুমুস থালা সহ অন্তর্ভুক্ত করা হয়নি,তারা একটি স্যান্ডউইচ ভুলে গিয়েছিলাম, । 735 | রেস্টুরেন্ট খারাপভাবে আলোড়িত, কর্মীরা খুব মনোযোগী ছিল না,সেবা দরিদ্র ছিল,এবং আমাদের এই যুগ্মের চেয়ে খাওয়া হবে ম্যাকডোনাল্ডে । 736 | রেস্টুরেন্ট খারাপভাবে আলোড়িত, কর্মীরা খুব মনোযোগী ছিল না,সেবা দরিদ্র ছিল,এবং আমাদের এই যুগ্মের চেয়ে খাওয়া হবে ম্যাকডোনাল্ডে । 737 | নম্বর 1 হওয়ার জন্য, এই জায়গাটি তার তথাকথিত খ্যাতি অর্জনের জন্য কাজ করার অনেকে কাজ করেছে 738 | ভয়ানক অভিজ্ঞতা 739 | যদিও অর্ডার এবং খাদ্য পেতে অপেক্ষা ছিল,পরিষেবাটি ধীরে ধীরে ভিড় না যাতে । 740 | সেখানে কোন পরিবেশ ছিল না,সেবা ছিল অনুপযুক্ত,এবং খাদ্যটি ছিল গড়ের নিচে। 741 | সেখানে কোন পরিবেশ ছিল না,সেবা ছিল অনুপযুক্ত,এবং খাদ্যটি ছিল গড়ের নিচে। 742 | সেখানে কোন পরিবেশ ছিল না,সেবা ছিল অনুপযুক্ত,এবং খাদ্যটি ছিল গড়ের নিচে। 743 | নির্দিষ্টভাবে এই এক আমার অন্তত প্রিয়। 744 | মাছ দুর্ভাগ্যবশত অতীতের মত অতীত হিসাবে প্রস্তুত ছিল না,মিসু স্যুপের স্বাদ ছিল। -------------------------------------------------------------------------------- /bengali_slung_abusive.txt: -------------------------------------------------------------------------------- 1 | ১। শুয়োরের বাচ্চা 2 | ২। কুত্তার বাচ্ছা 3 | ৩। হারামির বাচ্চা 4 | ৪। হারামি 5 | ৫। হারামজাদা 6 | ৬। হারামখোর 7 | ৭। খাঙ্কিরপোলা 8 | ৮। খান্কি মাগির পোলা 9 | ৯। চোদনা 10 | ১০। চুদির ভাই 11 | ১১। চুতমারানি 12 | ১২। চুদির পোলা 13 | ১৩। তর মায়রে চুদি 14 | ১৪। তর মায়রে বাপ 15 | ১৫। শালা 16 | ১৬। শালার পো শালা 17 | ১৭। হুমুন্দির পুত 18 | ১৮। মাঙ্গির পুত 19 | ৯। নাটকির পো 20 | ২০। ল্যাউড়ার পুত 21 | ২১.হাউয়ার পো 22 | ২২.হাউয়ার নাতি 23 | ২৩.চুদানির পো 24 | ২৪.ভুদার বেটা 25 | ২৫.লটির পো 26 | ২৬.লটির বেটা 27 | ২৭.ভেড়াচ্চোদা 28 | ৩১. মাউড়া চোদা 29 | ৩২. গুয়ার ভিতরে / হোগার ভিতরে ভইড়া দিমু… 30 | ৩৩. ঠ্যাঁঙ কাইট্টা পুটকি দা ভইরা দুম! 31 | ৩৪. হালা ল্যাওড়া চোদা 32 | ৩৫. বানচোত 33 | ৩৬. কুত্তাচোদা 34 | ৩৭. তর পুটকিত ধান ছড়াইয়া চড়ুই দিয়া খাওয়ামু 35 | ৩৮. বালি দিয়া চুদমু তরে খাঙ্কি মাগী! 36 | ৩৯.বালের রয়েল বেঙ্গল উকুন 37 | ৪০. তোর হউরিরে ডিগবাজী 38 | ৪১. ছি ছি ছি 39 | ৪৫. আল বদর 40 | ৪৬. তোর জাঙ্গীয়া খুইল্যা আগুন লাগায় দিমু 41 | ৪৮. বাল ফালায়া খালে নামানো 42 | ৪৯. বাল ফালায়া আটিঁ বান্ধা 43 | ৫০. বালে বালে গিট্টু 44 | 51. গোলাম আযম 45 | 52. মইত্যা নিজামী 46 | 53. গেলমান 47 | 54. তিনকোনা 48 | ৫5. তৃনভোজ 49 | ৫6. চতুরচোর 50 | ৫7. মহাবুবস্ 51 | 58। বাপের আগে বাল ফালায় 52 | ৫৯৷ ভোদাই 53 | ৬০৷ ভোদার বাল 54 | ৬১৷ বাল 55 | ৬২৷ বাল ছাল 56 | ৬৩৷ ধোনের বাল 57 | ৬৪৷ ধোন 58 | ৬৫৷ হোল 59 | ৬৬৷ টেংরি ভাইংগা হাতে ধরায়া দিমু 60 | ৬৭৷ নটি 61 | ৬৮৷ নটি মাগি 62 | ৬৯৷ নটি মাগির পোলা 63 | ৭০৷ নটি মাগির ঝি 64 | ৭১৷ গুদের বাল 65 | ৭২৷ মাগিবাজ 66 | ৭৩৷ মাইগ্যা 67 | ৭৪. বেশ্যা মাগী 68 | ৭৫. বাল ফালাইয়া আটি বান 69 | ৭৬. ভৈরব মাগী 70 | ৭৭. পুকটি মারা খা 71 | ৭৮. গাড় মারা খা 72 | ৭৯. ভইরা দিমু 73 | ৮০. মাঙ্গের পোলা 74 | ৮১. উপ্তা কইরা চুদমু 75 | ৮২. মাঙ্গের নাতি 76 | ৮৩. চুদনা মাগী 77 | ৮৪. ভাতার চুদা 78 | ৮৫. মীরজাফর 79 | ৮৬. নীজামী 80 | ৮৭. গরম ডিম দিমু 81 | ৮৮. উপ্তা কইরা চুদা দিমু 82 | ৮৯. গোস্তের লাঠি সাটামু 83 | ৯০. ধোন কাইট্টা কুত্তা দিয়া খাওয়ামু 84 | ৯১. লেওরা 85 | ৯২. নিবীর্জ 86 | ৯৩. চুতমারানীর পোলা 87 | ৯৪. তর মায়েরে চিচিং ফাক 88 | ৯৫. কান্দে ফালাইয়া তর মায়েরে চুদি 89 | ৯৬. পুটকিতে বাশ দিমু 90 | ৯৭. চামড়া ছুইল্লা লবণ লাগামু 91 | ৯৮. লাথ্থি দিমু 92 | ৯৯. উষ্টা খা 93 | ১০০. ইউনুস (সুদখোর) 94 | ১০১.গুদির ব্যাটা 95 | ১০২.কাঠ্ঠির বেট্যা 96 | ১০৩.ল্যাদানী 97 | ১০৪.হোলচাটা 98 | ১০৫.মাহফুজ সাহেব 99 | ১০৬.বাইনচোদ 100 | ১০৭.মাদার চোদ 101 | ১০৮.হোগা চাটা 102 | ১০৯.১ ইঞ্চি 103 | ১১০.নিজামী চোদা 104 | ১১১.মুজাহিদের বউ 105 | ১১২.গো আর জুতা 106 | ১১৩.কুত্তার হোল 107 | ১১৪.মাসিকের রক্ত। 108 | ১১৫.হোল টাইনা পুকটিতে ভর 109 | ১১৬.হোলের চুলকানী। 110 | ১১৭। আবাল চোদা। 111 | ১১৮। বোকা আচোদা (যাদের বোকারাও চোদে না) 112 | ১১৯। খবিশ চোদা (যাদের শুধু খবিশরা চোদে) 113 | ১২০। ভুস্কি মাগির পোলা 114 | ১২১। তর ভোদায় বিলাই হ্যাচড়া (এক ধরনের কাটাযুক্ত লম্বা শীষ) 115 | ১২২। তর মার ভোদায় পাব্লিক টয়লেট 116 | ১২৩.তর মায়ের ভুদাতে পোকা 117 | ১২৪.তর বাপপের হোল তর বউয়ের ভোদাতে। 118 | ১২৫.তর মায়ের ঐখানে বিছাতু পাতা। 119 | ১২৬. গোলাম আযম 120 | ১২৭. সাঈদী 121 | ১২৮. মুজাহিদ 122 | ১২৯. নিজামী 123 | ১৩০. এরশাদ 124 | ১৩১. জামাত 125 | ১৩২. শিবির 126 | ১৩৩. পাকিস্তানি 127 | ১৩৪. বুশ 128 | ১৩৫. তালেবান 129 | ১৩৬. হিটলার 130 | ১৩৭. হালদা নদী 131 | ১৩৮. বিএসএফ 132 | ১৩৯. গ্রামীণ ব্যাংক 133 | ১৪০. গ্রামীণ ফোন 134 | ১৪১. মজবাশার 135 | ১৪২. সোনার বাংলা ব্লগ 136 | ১৪৩. তোগোরে ফাসিতে লটকাইয়া চুদমু 137 | ১৪৪. তোগোর ধোন টাইনা তোগোর পিছন দিয়া ঢুকামু 138 | ১৪৫. ইয়াহিয়া 139 | ১৪৮. আইয়ুব খান 140 | ১৪৯. মোহাম্মদ আলী জিন্নাহ 141 | ১৫০. জং ধরা লোহা দিয়া পাকিস্তানের মানচিত্র বানাই্য়া তোদের পিছন দিয়া ঢুকামু। 142 | ১৫১। তর মায়ের ভোদা শিরিষ কাগজ দিয়া ঘইষা দিমু। 143 | ১৫২। তর মায়ের ভোদা বোম্বাই মরিচ দিয়া চুদামু। 144 | ১৫৩। তর হোগায় ইনপুট, তর মায়ের ভোদায় আউটপুট। 145 | ১৫৪। তর বাপের পুটকির ফুটা দিয়া কাডল ঢুকামু। 146 | ১৫৫। নিজামীর গোয়ার কৃমি। 147 | ১৫৬। তর বাপের ধন দিয়া ডাংগুলি খেলুম। 148 | ১৫৭। তর বাপের বিচি বেইচা কটকটি খামু। 149 | ১৫৮। তর বৌয়ের ভোদায় মাগুর মাছ চাষ করুম। 150 | ১৫৯। তর ধন দিয়া মাটি খুড়ুম। 151 | ১৬০। ফাটা কন্ডমের ফসল। 152 | ১৬১। লাত্থায় তর মার আনরেজিস্টার্ড শ্বশুরবাড়ী ফাকিস্তান পাঠায় দিমু। 153 | ১৬২। হাতির ল্যাওড়া দিয়া তর মায়েরে চুদুম। 154 | ১৬৩। তর মায়ের ভোদা ছিল্লা লবণ লাগায় দিমু। 155 | ১৬৪.তর বাপের হোগা দিয়া ট্রেন ভইরা দিমু। 156 | ১৬৫.তরে গোআ দিয়া চুদামু 157 | ১৬৭.এক কানে হোল ভইরা আরেক কান দিয়া বাইর করমু। 158 | ১৬৮.তোর হোল ভাজি কইরা তোরেই খাওয়ামু 159 | ১৬৯.কুত্তার পুকটি চাটামু 160 | ১৭০.মাসিকের ত্যানা। 161 | ১৭১.তোর নাকে হাইগ্যা দিমু। 162 | ১৭২.তোর বাপ গাইড়্যা। 163 | ১৭৩.মোবাইল ভাইব্রেশন কইরা তুর পুকটিতে ভরবো। 164 | ১৭৪.তোর বইয়ের মুসলমানি দিমু। 165 | ১৭৫.তোর বাপে তোর নানা। 166 | -------------------------------------------------------------------------------- /stopwords-bn.txt: -------------------------------------------------------------------------------- 1 | অতএব 2 | অথচ 3 | অথবা 4 | অনুযায়ী 5 | অনেক 6 | অনেকে 7 | অনেকেই 8 | অন্তত 9 | অন্য 10 | অবধি 11 | অবশ্য 12 | অর্থাত 13 | আই 14 | আগামী 15 | আগে 16 | আগেই 17 | আছে 18 | আজ 19 | আদ্যভাগে 20 | আপনার 21 | আপনি 22 | আবার 23 | আমরা 24 | আমাকে 25 | আমাদের 26 | আমার 27 | আমি 28 | আর 29 | আরও 30 | ই 31 | ইত্যাদি 32 | ইহা 33 | উচিত 34 | উত্তর 35 | উনি 36 | উপর 37 | উপরে 38 | এ 39 | এঁদের 40 | এঁরা 41 | এই 42 | একই 43 | একটি 44 | একবার 45 | একে 46 | এক্ 47 | এখন 48 | এখনও 49 | এখানে 50 | এখানেই 51 | এটা 52 | এটাই 53 | এটি 54 | এত 55 | এতটাই 56 | এতে 57 | এদের 58 | এব 59 | এবং 60 | এবার 61 | এমন 62 | এমনকী 63 | এমনি 64 | এর 65 | এরা 66 | এল 67 | এস 68 | এসে 69 | ঐ 70 | ও 71 | ওঁদের 72 | ওঁর 73 | ওঁরা 74 | ওই 75 | ওকে 76 | ওখানে 77 | ওদের 78 | ওর 79 | ওরা 80 | কখনও 81 | কত 82 | কবে 83 | কমনে 84 | কয়েক 85 | কয়েকটি 86 | করছে 87 | করছেন 88 | করতে 89 | করবে 90 | করবেন 91 | করলে 92 | করলেন 93 | করা 94 | করাই 95 | করায় 96 | করার 97 | করি 98 | করিতে 99 | করিয়া 100 | করিয়ে 101 | করে 102 | করেই 103 | করেছিলেন 104 | করেছে 105 | করেছেন 106 | করেন 107 | কাউকে 108 | কাছ 109 | কাছে 110 | কাজ 111 | কাজে 112 | কারও 113 | কারণ 114 | কি 115 | কিংবা 116 | কিছু 117 | কিছুই 118 | কিন্তু 119 | কী 120 | কে 121 | কেউ 122 | কেউই 123 | কেখা 124 | কেন 125 | কোটি 126 | কোন 127 | কোনও 128 | কোনো 129 | ক্ষেত্রে 130 | কয়েক 131 | খুব 132 | গিয়ে 133 | গিয়েছে 134 | গিয়ে 135 | গুলি 136 | গেছে 137 | গেল 138 | গেলে 139 | গোটা 140 | চলে 141 | চান 142 | চায় 143 | চার 144 | চালু 145 | চেয়ে 146 | চেষ্টা 147 | ছাড়া 148 | ছাড়াও 149 | ছিল 150 | ছিলেন 151 | জন 152 | জনকে 153 | জনের 154 | জন্য 155 | জন্যওজে 156 | জানতে 157 | জানা 158 | জানানো 159 | জানায় 160 | জানিয়ে 161 | জানিয়েছে 162 | জে 163 | জ্নজন 164 | টি 165 | ঠিক 166 | তখন 167 | তত 168 | তথা 169 | তবু 170 | তবে 171 | তা 172 | তাঁকে 173 | তাঁদের 174 | তাঁর 175 | তাঁরা 176 | তাঁাহারা 177 | তাই 178 | তাও 179 | তাকে 180 | তাতে 181 | তাদের 182 | তার 183 | তারপর 184 | তারা 185 | তারৈ 186 | তাহলে 187 | তাহা 188 | তাহাতে 189 | তাহার 190 | তিনঐ 191 | তিনি 192 | তিনিও 193 | তুমি 194 | তুলে 195 | তেমন 196 | তো 197 | তোমার 198 | থাকবে 199 | থাকবেন 200 | থাকা 201 | থাকায় 202 | থাকে 203 | থাকেন 204 | থেকে 205 | থেকেই 206 | থেকেও 207 | দিকে 208 | দিতে 209 | দিন 210 | দিয়ে 211 | দিয়েছে 212 | দিয়েছেন 213 | দিলেন 214 | দু 215 | দুই 216 | দুটি 217 | দুটো 218 | দেওয়া 219 | দেওয়ার 220 | দেওয়া 221 | দেখতে 222 | দেখা 223 | দেখে 224 | দেন 225 | দেয় 226 | দ্বারা 227 | ধরা 228 | ধরে 229 | ধামার 230 | নতুন 231 | নয় 232 | না 233 | নাই 234 | নাকি 235 | নাগাদ 236 | নানা 237 | নিজে 238 | নিজেই 239 | নিজেদের 240 | নিজের 241 | নিতে 242 | নিয়ে 243 | নিয়ে 244 | নেই 245 | নেওয়া 246 | নেওয়ার 247 | নেওয়া 248 | নয় 249 | পক্ষে 250 | পর 251 | পরে 252 | পরেই 253 | পরেও 254 | পর্যন্ত 255 | পাওয়া 256 | পাচ 257 | পারি 258 | পারে 259 | পারেন 260 | পি 261 | পেয়ে 262 | পেয়্র্ 263 | প্রতি 264 | প্রথম 265 | প্রভৃতি 266 | প্রযন্ত 267 | প্রাথমিক 268 | প্রায় 269 | প্রায় 270 | ফলে 271 | ফিরে 272 | ফের 273 | বক্তব্য 274 | বদলে 275 | বন 276 | বরং 277 | বলতে 278 | বলল 279 | বললেন 280 | বলা 281 | বলে 282 | বলেছেন 283 | বলেন 284 | বসে 285 | বহু 286 | বা 287 | বাদে 288 | বার 289 | বি 290 | বিনা 291 | বিভিন্ন 292 | বিশেষ 293 | বিষয়টি 294 | বেশ 295 | বেশি 296 | ব্যবহার 297 | ব্যাপারে 298 | ভাবে 299 | ভাবেই 300 | মতো 301 | মতোই 302 | মধ্যভাগে 303 | মধ্যে 304 | মধ্যেই 305 | মধ্যেও 306 | মনে 307 | মাত্র 308 | মাধ্যমে 309 | মোট 310 | মোটেই 311 | যখন 312 | যত 313 | যতটা 314 | যথেষ্ট 315 | যদি 316 | যদিও 317 | যা 318 | যাঁর 319 | যাঁরা 320 | যাওয়া 321 | যাওয়ার 322 | যাওয়া 323 | যাকে 324 | যাচ্ছে 325 | যাতে 326 | যাদের 327 | যান 328 | যাবে 329 | যায় 330 | যার 331 | যারা 332 | যিনি 333 | যে 334 | যেখানে 335 | যেতে 336 | যেন 337 | যেমন 338 | র 339 | রকম 340 | রয়েছে 341 | রাখা 342 | রেখে 343 | লক্ষ 344 | শুধু 345 | শুরু 346 | সঙ্গে 347 | সঙ্গেও 348 | সব 349 | সবার 350 | সমস্ত 351 | সম্প্রতি 352 | সহ 353 | সহিত 354 | সাধারণ 355 | সামনে 356 | সি 357 | সুতরাং 358 | সে 359 | সেই 360 | সেখান 361 | সেখানে 362 | সেটা 363 | সেটাই 364 | সেটাও 365 | সেটি 366 | স্পষ্ট 367 | স্বয়ং 368 | হইতে 369 | হইবে 370 | হইয়া 371 | হওয়া 372 | হওয়ায় 373 | হওয়ার 374 | হচ্ছে 375 | হত 376 | হতে 377 | হতেই 378 | হন 379 | হবে 380 | হবেন 381 | হয় 382 | হয়তো 383 | হয়নি 384 | হয়ে 385 | হয়েই 386 | হয়েছিল 387 | হয়েছে 388 | হয়েছেন 389 | হল 390 | হলে 391 | হলেই 392 | হলেও 393 | হলো 394 | হাজার 395 | হিসাবে 396 | হৈলে 397 | হোক 398 | হয় 399 | --------------------------------------------------------------------------------