PDA

View Full Version : سوال: پردازش متن



armin8651
سه شنبه 01 اسفند 1391, 09:25 صبح
سلام
یک سوال داشتن ازتون
فرض کنید یک متنی مثل abcd داریم و میخوایم تمامی رشته های به طول k رو از این متن به دست بیاریم، یعنی اگه k تو این مثال 2 باشه میخوایم رشته های ab, bc, cd رو به دست بیاریم. اگر هم یکی از رشته های حاصل تکراری باشند تعداد تکرار اونها رو به دست بیاریم. مثلا تو مثال ababc نتیجه (1)ab(2) , ba(1), bc حاصل بشه، یعنی برای هر کدوم از رشته های حاصل متغیری داشته باشیم که تعداد اونها رو تو متن نشون بده.
حالا به نظرتون بهترین راه برای حل این سوال چیه که نیاز به زمان کمتری هم داشته باشه؟
همچنین نیاز داریم که رشته های حاصل رو ذخیره کنیم تا بعد دوباره رشته ها رو پردازش کنیم، به نظرتون بهترین روش ذخیره کردنشون چیه؟ دیتابیس یا فایل یا ... ؟
ممنون

مهرداد صفا
سه شنبه 01 اسفند 1391, 22:04 عصر
با سلام
در یک حلقه از 0 شروع کنید تا length-k و در هر بار تکرار حلقه با استفاده از متود Substring از شمارنده حلقه k تا کاراکتر جدا کنید و به لیست اضافه کنید.
با استفاده از متود Count می توانید تعداد تکرار هر عضو را به دست بیاورید.
به این صورت:

Dim SubStrings As New List(Of String)
Dim Main As String = "ABABC"
Dim k As Integer = 2
For i = 0 To Main.Length - k
SubStrings.Add(Main.Substring(i, k))
Next
Dim q = From Substring In SubStrings.Distinct Select New With {.text = Substring, .count = CType(SubStrings, IEnumerable(Of String)).Count(Function(x) x = Substring)}

For Each x In q
MsgBox(x.text + ": " + x.count.ToString)
Next

armin8651
چهارشنبه 02 اسفند 1391, 14:15 عصر
با سلام
در یک حلقه از 0 شروع کنید تا length-k و در هر بار تکرار حلقه با استفاده از متود Substring از شمارنده حلقه k تا کاراکتر جدا کنید و به لیست اضافه کنید.
با استفاده از متود Count می توانید تعداد تکرار هر عضو را به دست بیاورید.
به این صورت:

Dim SubStrings As New List(Of String)
Dim Main As String = "ABABC"
Dim k As Integer = 2
For i = 0 To Main.Length - k
SubStrings.Add(Main.Substring(i, k))
Next
Dim q = From Substring In SubStrings.Distinct Select New With {.text = Substring, .count = CType(SubStrings, IEnumerable(Of String)).Count(Function(x) x = Substring)}

For Each x In q
MsgBox(x.text + ": " + x.count.ToString)
Next


مرسی، خیلی ممنون
خوم با یه روش دیگه حلش کردم ولی روش شما خیلی جالبه و فکر کنم از نظر زمانی بهتر از روش خودم باشه
لطفا در مورد ذخیره کردنشون هم یه نظری بدین، چه طوری ذخیره بشن که معقول باشه و بعد هم بشه به راحتی از این رشته ها با تکرارشون استفاده کرد، آخه فقط یک متن نیست، چند هزارتا فایل متنی رو میخوام به این صورت ویرایش کنم بعد نیاز هست که اجتماع همه این اعضا محاسبه بشه، در این صورت میخواستم بدونم که چه جوری ذخیره بشن بهتره
بازم ممنون

armin8651
پنج شنبه 03 اسفند 1391, 13:22 عصر
دوستان کسی نظری نداره در این زمینه؟
اگه بگین ممنون میشم