سی شارپ (ڈاٹ نیٹ) ونڈوز فارم اپلی کیشن کے تعلق سے مدد

شکیب نے 'پروگرامنگ' کی ذیل میں اس موضوع کا آغاز کیا، ‏مارچ 9, 2016

  1. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    تمام پروگرامرز کو کوڈنگ بھرا سلام۔
    بندہ عاجز سی شارپ میں نیا ہے، اوبجیکٹ اوری اینٹڈ کے سارے کنسیپٹس (سی پی پی) کلیئر ہیں۔ منی پروجیکٹ پر کام کرنے کے دوران میں نے سی شارپ ہی کو چنا کیونکہ بے حد آسان معلوم ہوئی۔
    اس دوران جو بھی پریشانیاں آئیں گی ان شاء اللہ میں انہیں پوسٹ کرتا رہوں گا۔ میں چاہتا ہوں کہ رئیلی یہ پروجیکٹ خود سے سمجھ سمجھ کر کروں۔
    پس منظر:
    تھوڑا پس منظر یہ ہے کہ پروجیکٹ Natural Language Processing پر ہے، جس میں مقصد یہ ہے کہ یوزر اگر ایک جملہ لکھے، تو اسے آؤٹ پٹ میں اس جملہ کا مثبت یا منفی ہونا معلوم ہو۔(یہ بیسک کام ہے۔۔۔ اسے بعد میں Extend کیا جاسکتا ہے مثلا Positive , Negative, Average وغیرہ)
    مثال:
    Input:Shakeeb is a good boy.
    Output: Positive
    Input :It's bad.
    Output: Negative
    اس میں آؤٹ پٹ کے لیے میسج باکس شو کر رہا ہوں۔۔۔ اور بہتر کی تجویز آپ دے دیں تو نوازش۔
    فی الوقت کام کتنا ہوا ہے؟
    • RichTextBox1 میں موجود ٹیکسٹ میں اگر لفظ Good, awesome, nice وغیرہ ہیں تو
      کوڈ:
      messagebox.show("Positive");
    • بصورتِ دیگر اگر Bad وغیرہ الفاظ ہیں تو میسج باکس میں Negative شو کرنا
    • تقریبا 1200 Reviews کی ایک فائل ہے جس میں یہ جملے لکھے گئے ہیں، اس ٹیکسٹ فائل کو رچ ٹیکسٹ باکس میں اوپن کرنا
    • لائن بائی لائن ریڈ کرنا
    • رزلٹ شو کرنا
    پریشانیاں:
    چونکہ ڈاٹ نیٹ میں یہ بالکل شروعات ہے میری، اس لیے اگر پریشانیاں بچکانہ بھی لگیں تو امید ہے برا نہیں مانیں گے۔
    پریشانی نمبر 1:
    اچھے تاثرات ظاہر کرنے والے الفاظ Good, awesome وغیرہ کی موجودگی چیک کرنے کے لیے میں نے .contains میتھڈ استعمال کیا ہے۔ اس میں پریشانی یہ ہے کہ فی الحال تو صرف تین چار الفاظ لکھے ہیں، البتہ سافٹ ویئر کی اچھی کارکردگی کے لیے ایک ڈکشنری اچھے الفاظ کی ہے انہیں بار بار .contains یوز کرکے استعمال کرنا بڑا احمقانہ سا لگتا ہے۔ کام تو نکل جائے گا، لیکن ایک تو محنت مفت کی، اور دوسرے میں سمجھتا ہوں اس کے لیے کوئی اچھا حل(مثلا اس اچھے الفاظ کی ڈکشنری فائل کو ڈاریکٹ استعمال کرنا) نکل سکتا ہے۔
    کوڈ:
    if (input.contains("good") || input.contains("awesome")) {
    //جو بھی ایگزیکیوٹ کرنا ہے
    }
    اس کا حل بقول stackoverflow یہ ہے کہ ایک Array استعمال کیا جائے۔ لیکن ہر لفظ کو "" کے اندر لکھنا اس صورت میں پریشان کن ہوگا۔
    دوسرے حل تھوڑا ٹھیک لگا۔
    کوڈ:
    Pattern pattern = Pattern.compile("good|awesome");
    if (pattern.matcher(input).find()) {
        execute();
    }
    لیکن میرے خیال میں اگر ایک .txt فائل بطور ڈکشنری استعمال ہوسکتی تو بہت اچھا ہوتا۔

    توجہ: رانا hackerspk نبیل سید ذیشان ابرار حسین
     
    • معلوماتی معلوماتی × 2
  2. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    کوڈ:
            'open list of sentences to check
            Dim lines() As String = IO.File.ReadAllLines("C:\lines_one_review_per_line.txt", System.Text.Encoding.UTF8)
            'open file of positive words like good,nice. One word per line in lower case.
            Dim positive() As String = IO.File.ReadAllLines("C:\one_poitive_word_per_line.txt", System.Text.Encoding.UTF8)
            For Each line In lines
                For Each pos In positive
                    If LCase(line).Contains(pos) Then
                        RichTextBox1.AppendText(line & ": Positive" & vbNewLine)
                        Exit For
                    End If
                Next
            Next
     
    • زبردست زبردست × 2
    • معلوماتی معلوماتی × 2
    • پسندیدہ پسندیدہ × 1
  3. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    جزاک اللہ بھائی۔(آپ کا نام بھول گیا کہیں پڑھا ضرور تھا) اسے دیکھ کر کل بتاتا ہوں، امید ہے کام ہو جائے گا۔ نہیں ہوا تو پھر پوچھوں گا۔
    البتہ اگر Lower case میں نہیں ہیں، یعنی case کو اگنور کرنا ہے تو اس کے لیے کیا کرنا ہوگا؟
     
    • معلوماتی معلوماتی × 1
  4. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    کوڈ:
     If LCase(line).Contains(LCase(pos)) Then
     
    آخری تدوین: ‏مارچ 9, 2016
    • معلوماتی معلوماتی × 2
  5. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    hackerspk میں نے آپ کے بتائے ہوئے طریقے کے مطابق امپلی مینٹ کرنے کی کوشش کی،بس For لوپ کی جگہ do while استعمال کیا ہے۔۔۔ لیکن پتہ نہیں کیا گڑبڑ ہے، ذرا اس میں غلطی چیک کریں، مجھے تو سمجھ میں نہیں آرہی کہاں غلطی کر رہا ہوں۔
    کوڈ:
    string praise_word = "";
                System.IO.StreamReader objReader;
                objReader = new System.IO.StreamReader(@"D:\shakes.ahmad\Personals\School\Programs\Mini Project 6th sem\Praise Word List.txt");
                do
                {
                    praise_word = objReader.ReadLine() + "\r\n";
                    //MessageBox.Show(praise_word);
                   
                        if (richTextBox1.Text.Contains(praise_word))
                        {
                            MessageBox.Show("POISTIVE");
                        }
                   
                } while (objReader.Peek() != -1);
                objReader.Close();
            }
    IF کی کنڈیشن میں سرخ الفاظ کو دیکھیں۔ مذکورہ بالا کوڈ کچھ کام نہیں کر رہا ہے۔ جب میں نے بطور ٹیسٹ praise_word کو بدل کے
    کوڈ:
    if (richTextBox1.Text.Contains("good"))
    کیا تو میسج باکس پازیٹیو شو کر رہا تھا۔
    میں نے یہ دیکھنے کے لیے کہ آیا praise_word ویری ایبل میں لفظ good وغیرہ آرہے ہیں یا نہیں، ایک میسج باکس لگا کر دیکھا (اس Statement کو میں نے اوپر کمنٹ کر دیا ہے سبز رنگ میں) تو یکے بعد دیگرے میسج باکس میں میری ڈکشنری میں موجود الفاظ good, nice وغیرہ دکھائی دیتے گئے۔۔۔ یعنی praise_word میں وہ الفاظ موجود ہیں۔
    اس کے بعد بھی
    کوڈ:
                        if (richTextBox1.Text.Contains(praise_word))
                        {
                            MessageBox.Show("POISTIVE");
                        }
    
    کام نہیں کر رہا ہے۔۔۔ ایسا کیوں؟
    نبیل رانا ابرار حسین
     
    • معلوماتی معلوماتی × 1
  6. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    کوڈ:
         'for single line in richtextbox
            If RichTextBox1.Text.ToLower.Contains(praise_word.ToLower) Then
                MessageBox.Show("POISTIVE")
            End If
            'for multiple lines in richtextbox
            For Each line In RichTextBox1.Lines
                If line.ToLower.Contains(praise_word.ToLower) Then
                    MessageBox.Show("POISTIVE")
                End If
            Next
     
    • زبردست زبردست × 2
    • پسندیدہ پسندیدہ × 1
    • معلوماتی معلوماتی × 1
  7. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    کوڈ:
     'for single line in richtextbox
    'for multiple lines in richtextbox
    اس کے لیے کیا میتھڈ ہے؟ کوئی خصوصی میتھڈ ہے یا لوپ ہی سے کرنا ہے؟
     
    • معلوماتی معلوماتی × 1
  8. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    طریقہ واردات تو ایک سے زائد ہیں۔ منحصر اس پر ہوتا ہے کہ استعمال کس جگہ کیا جائے۔ عام طور پر بار بار کنٹرول کو استعمال نہیں جاتا اس سے آپ کا عمل بہت سست رفتار ہو جاتا ہے۔ ایک ہی دفعہ کنٹرول سے معلومات اٹھا کر کسی ویری ایبل میں جمع کر دی جاتی ہیں ۔ اور اگلی دفعہ ضرورت پڑنے پر اس ویری ایبل سے معلومات لے لی جاتی ہیں۔ لیکن اس کے ساتھ ساتھ ریم پر موجود جگہ کا دھیان بھی ضروری ہے۔ مثلا:

    اگر کسی خاص سطر کو جانچنا ہو تو
    کوڈ:
    RichTextBox1.Lines(1)
     
    • پسندیدہ پسندیدہ × 1
    • زبردست زبردست × 1
    • معلوماتی معلوماتی × 1
    • متفق متفق × 1
  9. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    ہاں یہ تو ہے۔
    میں اسے چیک کر کے کل آگاہ کروں گا۔
    ویسے ایک بات سمجھ میں نہیں آئی، کہ میں نے صرف Case سے متعلق کمانڈ نہیں دی تھی (جو آپ نے اپنے کوڈ میں لکھی ہے) تو کیا اسی وجہ سے میرا کوڈ کام نہیں کر رہا تھا؟
    جبکہ ایسا ہونا تو نہیں چاہیے، کیونکہ میں نے Praising_word_list.txtمیں بھی good ہی لکھا تھا اور پھر چیک کرنے کے لیے rich text box میں بھی lower case میں ہی good لکھا تھا، پھر بھی کوڈ رن نہیں ہوا تھا۔ کیوں بھلا؟
     
    • معلوماتی معلوماتی × 1
  10. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    جواب نمبر ایک
    جادو، کیمرے کا کمال وغیرہ وغیرہ
    جواب نمبر دو
    اگر اس سے معاملہ ہوا ہے تو کیس کا ہی فرق تھا۔
     
    • معلوماتی معلوماتی × 1
    • پر مزاح پر مزاح × 1
  11. فرخ

    فرخ محفلین

    مراسلے:
    1,722
    جھنڈا:
    Pakistan
    موڈ:
    Aggressive
    ڈاٹ نیٹ میں "List" یا "Dictionary" میں منفی اور مثبت الفاظ کی ڈکشنری لوڈ کر لیں۔ اور الفاظ کو ان میں سے تلاش کر لیں۔ خاص طور پر "List" ڈیٹا سٹرکچر تلاش کرنے کے مختلف "Algorithms" کو سپورٹ کرتا ہے۔
    یہ دونوں ڈیٹا سٹرکچرز بہت اچھی پرفارمنس کے حامل ہیں ۔ زیادہ تر کام "List" بہت استعمال کیا جاتا ہے۔۔۔ نیچے دئے ہوئے لنک سے آپ کو اسکے استعمال کی اچھی معلومات مل جائیں گی۔
    http://www.dotnetperls.com/list
     
    • زبردست زبردست × 2
    • معلوماتی معلوماتی × 1
  12. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    اس سے معاملہ حل نہیں ہواتھا۔ فرخ بھائی کا مراسلہ دیکھا کہ لسٹ کا استعمال اس سلسلے میں بہتر ہوگا، تو یونہی انگلیاں کی بورڈ کا سفر کرنے پھر روانہ ہوگئیں اور الحمد للہ کام ہوگیا۔
    میں نے یہ کیا کہ یوزر کی فراہم کردہ فائل کو listbox1 میں ایک لائن میں ایک جملہ کے طور پر لوڈ کرادیا، پھر اچھے الفاظ کی ڈکشنری کو دوسرے listbox2 میں لوڈ کرایا۔۔۔ foreach کا استعمال کرکے چیک کیا تو کارکردگی (اب تک) درست آئی۔
    کوڈ:
    foreach (string line in listBox1.Items)
                {
                    int count = 0;
                    foreach (string line2 in listBox2.Items)
                    {
                        if (line.ToLower().Contains(line2.ToLower()))
                        {
                            count++;
                            MessageBox.Show("\"" + line.ToString() + "\"" + " which is on line number " + listBox1.Items.IndexOf(line).ToString() + " is POISTIVE SCENTENCE.");
                            if (count >= 2)
                                MessageBox.Show(count.ToString());
                        }
                       
                    }
    پریشانی نمبر 2:
    سرخ الفاظ مسئلہ کر رہے ہیں، خصوصا دوسرا میسج باکس جواب تو درست دیتا ہے، مثلا اگر ایک جملہ میں دو لفظ positive والے ہیں تو count کی قیمت 2 دکھاتا ہے، لیکن صرف ایک بار نہیں، بلکہ good_words کی ڈکشنری میں جتنی اینٹریز موجود ہیں، اتنی بار میسج باکس دکھاتا ہے ۔۔۔ جسے پھر فورس کویٹ کرنا پڑتا ہے۔(یہ شاید لوپ کی کوئی غلطی ہے)


    پریشانی نمبر 3:
    اصل پریشانی یہی ہے۔ کہ ابھی صرف positive words کی ڈکشنری کو لسٹ باکس میں لوڈ کرکے positiveness چیک کی ہے، جبکہ دوسری negative wordsکی ڈکشنری بھی ہے اور average کی بھی، میں نے اس میں سوچا تھا کہ ڈکشنری کو جس لسٹ باکس میں لوڈ کر رہا ہوں اسے visible=false کر دوں گا، لیکن اب تین تین ڈکشنری کے لیے تین لسٹ باکس رکھنا اور انہیں invisible کرنا بالکل ٹھیک نہیں ہوگا۔
    ----اس کا دوسرا متبادل کیا اختیار کروں(یعنی تین ”ڈکشنری“ کے لیے تین لسٹ باکس کے علاوہ کچھ
    ----کیا ایک ہی لسٹ باکس میں یکے بعد دیگرے تینوں ڈکشنریوں کو لوڈ کرکے کام کیا جائے؟ اور یہ کیسے ہوگا؟(یہ شاید آسان ہو، لیکن آپ لوگوں کے ذہن میں کچھ اور اچھا آئیڈیا آئے تو ضرور بتائیں امپلی مینٹیشن کے طریقے کے ساتھ)
    hackerspk رانا نبیل ابرار حسین
     
    • معلوماتی معلوماتی × 1
  13. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    فرخ کی مراد لسٹ باکس سے نہیں لسٹ سے تھی۔
    کوڈ:
     Dim mList As New List(Of String)
    میں نے پہلے مراسلے میں لسٹ ہی کی ایک شکل کو استعمال کیا تھا۔ یہ نہایت برق رفتار طریقہ ہوتا ہے جس سے آپ نہایت تیزی سے اپنے کام کی تکمیل کر لیتے ہیں۔
    باقی جتنا میں سمجھ پایا ہوں اس کے مطابق درج ذیل کوڈ آپ کے مسئلے کو حل کر دے گا۔
    کوڈ:
     Dim positive() As String = IO.File.ReadAllLines(Application.StartupPath & "\pos.txt")
            Dim negative() As String = IO.File.ReadAllLines(Application.StartupPath & "\neg.txt")
            For Each line In RichTextBox1.Lines
                If line.Trim.Length > 0 Then
                    Dim countP As Integer
                    Dim countN As Integer
                    For Each pos In positive
                        If pos.Trim.Length > 0 Then
                            If LCase(line).Contains(LCase(pos.Trim)) Then
                                countP += 1
                            End If
                        End If
    
                    Next
                    For Each neg In negative
                        If neg.Trim.Length > 0 Then
                            If LCase(line).Contains(LCase(neg.Trim)) Then
                                countN += 1
                            End If
                        End If
                    Next
                    Dim finalS As String = line
                    If countP > 0 Then
                        finalS += " contains " & countP & " positive values"
                    End If
                    If countN > 0 Then
                        If countP > 0 Then
                            finalS += " and " & countN & " negative values"
                        Else
                            finalS += " contains " & countN & " negative values"
                        End If
                    End If
                End If
            Next
    
    کافی انگریزی لکھوا دی، چلو اللہ تو دیکھ رہا ہے نا۔
     
    • معلوماتی معلوماتی × 1
    • پر مزاح پر مزاح × 1
    • متفق متفق × 1
  14. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    اللہ آپ کو بہترین بدلہ دے۔ آپ کا فراہم کردہ کوڈ دیکھ رہا ہوں۔ کیا آپ یہ کہنا چاہتے ہیں کہ میں لسٹ باکس کا استعمال نہ کروں۔ اگر اس کے بغیر کام نکل رہا ہے تو بہت اچھی بات ہوگی۔
     
    • معلوماتی معلوماتی × 1
  15. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    اصل میں یہ Dim وغیرہ کیا ہیں میں سمجھ نہیں پایا تھا، ٹائپ کرنے پر وژول اسٹوڈیو اس کے نیچے سرخ لکیر کھینچ دیتا ہے۔
     
    • معلوماتی معلوماتی × 1
  16. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    یہ کوڈ ویژول بیسک میں لکھا ہوا ہے۔ سی شارپ میں نہیں اس لیے ایسا ہو رہا ہے۔ میرا خیال تھا کہ آپ ویژول بیسک جانتے ہوں گے جیسے میں س شارپ کا کوڈ سمجھ لیتا ہوں لیکن آج تک سی شارپ میں کوئی اپلیکیشن نہیں بنائی۔ دونوں زبانیں ایک دوسرے کے بہت قریب ہیں۔ درج ذیل لنک سے کوڈ کو ٹرانسلیٹ کیا جا سکتا ہے۔

    http://converter.telerik.com/

    کوڈ:
    string[] positive = IO.File.ReadAllLines(Application.StartupPath + "\\pos.txt");
    string[] negative = IO.File.ReadAllLines(Application.StartupPath + "\\neg.txt");
    foreach (void line_loopVariable in RichTextBox1.Lines) {
    	line = line_loopVariable;
    	if (line.Trim.Length > 0) {
    		int countP = 0;
    		int countN = 0;
    		foreach (void pos_loopVariable in positive) {
    			pos = pos_loopVariable;
    			if (pos.Trim.Length > 0) {
    				if (Strings.LCase(line).Contains(Strings.LCase(pos.Trim))) {
    					countP += 1;
    				}
    			}
    
    		}
    		foreach (void neg_loopVariable in negative) {
    			neg = neg_loopVariable;
    			if (neg.Trim.Length > 0) {
    				if (Strings.LCase(line).Contains(Strings.LCase(neg.Trim))) {
    					countN += 1;
    				}
    			}
    		}
    		string finalS = line;
    		if (countP > 0) {
    			finalS += " contains " + countP + " positive values";
    		}
    		if (countN > 0) {
    			if (countP > 0) {
    				finalS += " and " + countN + " negative values";
    			} else {
    				finalS += " contains " + countN + " negative values";
    			}
    		}
    	}
    }
     
    • معلوماتی معلوماتی × 3
  17. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    اف! میں آپ کے کوڈ کو کوڈ نہیں بلکہ الگورتھم سمجھ رہا تھا، اور اسے امپلی منٹ کر رہا تھا سمجھ سمجھ کے۔
    خیر! اچھا ہوا یہ بات سامنے آگئی، ورنہ غلط فہمیاں مزید نقصان کو جنم دےسکتی ہیں۔
     
    • پر مزاح پر مزاح × 1
  18. hackerspk

    hackerspk محفلین

    مراسلے:
    499
    صنف کرخت اور صنف نازک کے درمیان غلط فہمیاں جنم دیتی ہیں اور پروگرامنگ میں غلط فہمیاں فہمیاں دیتی ہیں۔ ویسے خیال اپنا اپنا۔
     
    • پر مزاح پر مزاح × 3
  19. شکیب

    شکیب محفلین

    مراسلے:
    1,799
    جھنڈا:
    India
    موڈ:
    Breezy
    پریشانی نمبر 3:
    hackerspk بھائی کا سجیشن(لسٹ کو استعمال کرنے کا) اور فراہم کیا گیا کوڈ استعمال کرکے مطلوب رزلٹ حاصل ہوگیا الحمد للہ۔
    آگے عرض یہ ہے کہ ڈکشنری میں موجود الفاظ کے ساتھ دوسرا ایک کالم اٹیچ کرنا ہے، وہ ہے ریٹنگ کا۔ مثلا پہلے ڈکشنری اس طرح کی تھی
    good
    nice
    excellent
    awesome
    اور ان الفاظ کا استعمال کرکے آؤٹ پٹ آرہا تھا۔۔۔مثلا مثال یہ ہے
    yes, it's an excellent software
    output: +1
    لیکن اب شدت کو بھی محسوس کرنا ہے، یعنی اصل میں آؤٹ پٹ آنا چاہیے تھا۔۔۔
    output: +3
    یہ اس لیے کہ جملہ میں لفظ excellent کا استعمال ہے۔ وہی اگر good ہوتا تو آؤٹ پٹ آنا چاہیے : +1
    اس کے لیے ہماری ڈکشنری میں ہر لفظ کے آگے اس طرح کا اضافہ کرنا ہوگا۔
    good /1
    nice /1
    excellent /3
    اور نیگیٹیو ڈکشنری میں
    bad /-1
    worst /-3
    وغیرہ
    اب اس سلیش / کے بعد کی ریٹنگ کو کس طرح لیا جائے؟ اور اسے کس طرح آؤٹ پٹ میں ایڈ کیا جائے، مثلا
    it was excellent, really nice!
    output: 3+1=4
    ڈکشنری فائلز میں کالم کی طرز اختیار کرنے کے لیے / میں نے یہی محفل پر کسی پروگرام میں استعمال ہوتے ہوئے دیکھا ہے۔ کیا اس کا استعمال درست ہوگا، یا پھر ڈیٹا بیس بنا لیا جائے؟ ایکسل یا ایکسس کا(اس کا مجھے بالکل تجربہ نہیں ایکسس یا ایکسل کا)
    hackerspk رانا نبیل ابرار حسین
     
  20. محمد اسلم

    محمد اسلم محفلین

    مراسلے:
    697
    جھنڈا:
    India
    موڈ:
    Sleepy
    کیا آپ کو دونوں تجربات ہوچکے؟؟؟
     

اس صفحے کی تشہیر