الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فرز الكلمات من نص

مغلق
بدأه khwlani في 19 يوليو 2003 · 7 رد · 1,015 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

:اخواني الأعزاء حتى يمكن استغلال الوقت في اشياء مفيد في هذه الفترة

اكتب برنامج يقرا ملف نصي ثم يقوم البرنامج بافراز الكلمات وطباعة كل كلمة وعدد تكرارها في النص ملحوظة لاتكتب الكلمات الشائعة مثل

the, a ,on, what, where, of,if,...

البرنامج يعمل عمل الفهرس لكل كتاب

مثلا

computer 5

school 6

count 2

وهكذا

هذا السوال وضع في موضوع اسئلة التحدي من سوف يقدمها وهذا هو الربط

http://www.arabteam2000.com/vb/showthread....&threadid=30799

استخدم الclass التالية

1: StringTokeneizer

2: HasMab

3: Vector

لعرض البيانات استخدم الJtable

السوال ليس تحديا ولكن محاولات لفهم اساسيات وبرامج في الجافا ولقد وضعته هنا حتى يكون مستقلا عن سابقه

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#2

ما هو ال HasMap ??

#3

عفوا

HashMap

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#4

الفكرة كما يلي

1. برمجة كلاس على سبيل المثال

class MyWord
{
String myword;
int count;
Vector lines;
public MyWord(String m_word, intl line)
{
}
public String getWord()
{
...
}
public int getCount()
{
....
}
public Vector getLines()
{
.....
}
public void AddLine()
{
.....
}

}

2. قراءة الكلمات الشائعة من ملف ويتم تخزين الكلمات في Vector

3. قراءة نص من الملف سطر سطر وبعد ذلك استخدم ٍ StringTokeniezer

انشئ كائنات من النوع MyWord وخزنها في HashMap

4. تاكد من عدم وجود الكلمة مسبقا في HashMap وفي حالة وجودها ارفع من عددالكلمات واضف رقم السطر

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#6

هذه هي الكلاس المطلوبة والأن اريد ان تكون النتائج على شكل جدول في واجهه وفي هذه الواجهه يمكن للمستخدم ان يعمل ما يلي

1. حذف كلمة من الجدول وتخزينها في ملف للكلمات الشائعة ثم تعديل البرنامج بحيث لا يدخل الكلمات الشائعة

2. امكانية عرض الكلمات مرتبة ابجديا

يستحسن ان يشاهد help للmethods and classes لمعرفة الأستخدام لهن

package wordtest;
import java.util.*;
class  MyWord
{
    private int count=0;
    private Vector lines=null;
    private String word=null;
   public MyWord(String w,int linenr)
    {
        lines=new Vector();
        this.word=w;
        Integer x=new Integer(linenr);
        this.lines.add(x);
        count++;
    }
  public   boolean checkLines(int linenr)
    {
        Integer x=null;
        if(lines.size()==0)
            return false;
        for(int i=0;i        {
            x=(Integer)lines.elementAt(i);
            if(x.intValue()==linenr)
                return true;
        }
        return false;

    }
   public void addLine(int linenr)
    {
        if(!checkLines(linenr))
          lines.add(new Integer(linenr));
        count++;
    }
    public void outData()
    {
        String str="";  
        Integer x;
        for(int i=0;i        {
          x=(Integer)lines.elementAt(i);
          if(x!=null)
              str+=(""+x.intValue()+",");
        }
        str=str.substring(0,str.length()-1);        
        System.out.println(this.word+" :t"+this.count + " :t"+ str);
    }
}

/*
 * WordTokenizer.java
 *
 * Created on 23. Juli 2003, 10:22
 */

package wordtest;
import java.util.*;
import wordtest.*;
import java.io.*;


/**
 *
 * @author Khaled Al-Khwlani
 */
public class WordTokenizer {
    protected HashMap _hm=null;


    /** Creates a new instance of WordTokenizer */
    public WordTokenizer()
    {
        this._hm=new HashMap();

    }
     public static void main(String[] args) 
{
  WordTokenizer wt=new WordTokenizer();
  wt.readFromFile("D:javatesttest.txt");
  wt.outAllWords();
  wt=null;

}
   public void setInHashMap(String line,int line_nr)
    {
        if(line==null||line.length()==0)
            return;
        StringTokenizer strtok=new StringTokenizer(line);
        String word=null;
        while(strtok.hasMoreTokens())
        {
            word=strtok.nextToken();
            System.out.println(word);
            if( (word==null)||(word.length()<=1)||(word.trim().length()==0))
                continue;
            if(this._hm.isEmpty())
            {
                MyWord mw=new MyWord(word,line_nr);
                this._hm.put(word,mw);

            }
            else
            {
               MyWord mw=null;
               Object obj= this._hm.get(word);
               if(obj!=null)
               {
                   mw=(MyWord)obj;
                   mw.addLine(line_nr);
               }
               else
               {
                   mw=new MyWord(word,line_nr);
                   this._hm.put(word,mw);
               }
           }
        }
    }

    public void readFromFile(String fileName)
    {
        _hm.clear();
        try
        {
        FileReader fr=new FileReader(fileName);
        BufferedReader buffin=new BufferedReader(fr);
        String line=null;
        int line_nr=0;
        while((line=buffin.readLine())!= null)
        {
            line_nr++;
            setInHashMap(line, line_nr);
        }
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }      
    }
    public void outAllWords()
{
    MyWord mw=null;
    Collection co=this._hm.values();
    Object[] objs=co.toArray();
    for(int i=0;i    {
        if(objs!=null&&objs instanceof MyWord)
        {
            mw=(MyWord)objs;
           mw.outData();
        }
    }
}

}
اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#7
اقتباس
كاتب الرسالة الأصلية : محمد المؤيد

ما هو ال HasMap ??

الـ HashMap مثل الـ HashTable مع فروقات بسيطة

الكلام أنه عملية الـ Hashing كلها تعتمد على التخزين من أجل وصول أسرع ...

الـHashTable هو عبارة عن حاوية (مثل المصفوفة واللينكد لست) مخزنه فيها Objects المهم الشيء اللي يميز الـ HashTable أنه أنت تستخدم الـ index الخاص فيك ... يعني في المصفوفة لازم تستخدم أرقام ، هنا تقدر تستخدم كلمة للبحث عن كلمة .. يعني تحط أوبجكت في الحاوية ومعاه أوبجكت ثاني يكون بمثابة الـindex

put(Object key, Object value)

هذا الموضوع مغلق.

مواضيع مشابهة