извлечь арабскую букву из предложения или слова

Я разрабатываю небольшую программу на vb6, которая будет работать с арабским документом, я хочу подсчитать, сколько вхождений каждой арабской буквы появляется в документе

основные арабские символы

ا أ إ آ ى ؤ ئ ء ب ت ة ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه

пример предложения

البيت الكسز اللتيل الزجاج الست.‏

Я не знаю арабского и даже не умею его читать.

если vb6 не работает, я могу использовать vb.net


person Smith    schedule 10.02.2011    source источник


Ответы (2)


Будет намного проще использовать VB.Net.

  • VB6 имеет частичную поддержку Unicode.
  • В VB6 вы должны возможно, потребуется изменить кодовую страницу системы вашего ПК на арабский, чтобы можно было читать документ.

РЕДАКТИРОВАТЬ: решение для воздушного кода в VB.Net, частично основанное на этот ответ. Требуется обработка исключений.

''# You may need a different character encoding here, this is UTF-8
Using sr As New IO.StreamReader("Test.txt", Text.Encoding.UTF8)
  Dim c As Char
  Dim dict As New Dictionary(Of String, Integer)

  Do Until sr.EndOfStream
   c = ChrW(sr.Read)

   If (dict.ContainsKey(c))
     dict(c)+=1
   Else
     dict(c) = 1
   End If
  Loop
End Using
person MarkJ    schedule 10.02.2011
comment
спасибо, но я ищу решение или алгоритм, который вы можете мне дать - person Smith; 10.02.2011
comment
Хорошо, я мог бы предложить решение на VB.Net, но вам нужно будет предоставить дополнительную информацию. Какой формат у документа? Это текстовый файл? Вы знаете кодировку символов (например, UTF-8, UTF-16)? - person MarkJ; 10.02.2011
comment
это тестовый файл, содержащий символы, которые я предоставил в приведенном выше примере предложения - person Smith; 10.02.2011
comment
Хорошо, текстовый файл. Знаете ли вы кодировку символов? Это ANSI, UTF-8, UTF-16 ...? - person MarkJ; 10.02.2011
comment
Откройте файл в блокноте. Надеюсь, вы увидите арабские символы. Если заметите чепуху, дайте мне знать. Выберите "Файл - Сохранить как". В диалоговом окне «Сохранить как» есть запись о кодировке, и, надеюсь, Блокнот выберет что-нибудь в раскрывающемся списке. Скажите, пожалуйста, что именно там написано. Кроме того, если у вас есть время, вы можете прочитать Джоэла на Абсолютном минимуме, что каждый разработчик программного обеспечения абсолютно, безусловно должен Знайте о Юникоде и наборах символов - person MarkJ; 10.02.2011
comment
Если вам нужно поддерживать только один алфавит, вы можете использовать элементы управления VB6, если вы выберете шрифт, содержащий символы, соответствующим образом установите свойство Charset свойства Font элемента управления и тщательно выполните преобразование двойной кодовой страницы из внешней кодовой страницы и обратно в текущая системная кодовая страница (используя StrConv () дважды). Это описано в документации VB6 в разделах "Интернационализация". - person Bob77; 10.02.2011
comment
@MarkJ Я уже прочитал текстовый файл в строковый файл и использую vb.net, а не С # - person Smith; 10.02.2011
comment
@ Bob Riemersma, спасибо, как мне посчитать частоту символов - person Smith; 10.02.2011
comment
@smith Я разместил VB.Net, определенно не C #, хотя я признаю, что была опечатка, которую я только что исправил. У меня нет VB.Net IDE на этом телефоне :), поэтому я не могу проверить, действительно ли он действителен. Воздушный кодекс. - person MarkJ; 10.02.2011
comment
@MarkJ: Большое спасибо, я посмотрел на пример, который вы только что показали в URL-адресе, он касается частоты слов, но я не знаю, как адаптировать его к частоте символов, не могли бы вы мне помочь. - person Smith; 11.02.2011
comment
@Smith, кажется, я уже помог тебе? ... вы видели URL-адрес. Посмотрите прямо под URL-адресом. Вчера я уже публиковал код VB.Net, который считает символы, а не слова. - person MarkJ; 11.02.2011
comment
@Bob Спасибо за размещение полезной информации о работе кросс-кодовых страниц в VB6. Честно говоря, однако, для небольшой программы (предположительно разрабатываемой с нуля) конечно это та область, где VB.Net определенно является лучшим выбором? Вам совсем не о чем беспокоиться. - person MarkJ; 11.02.2011
comment
@Smith Вы так и не сказали нам кодировку символов. Вы видели инструкции в моем предыдущем комментарии о Блокноте? Ах да, и что вы имели в виду, я уже прочитал текстовый файл в строковый файл? Извините, но что такое строковый файл? И почему вы подумали, что это ответ на мой вопрос о кодировке символов? Я пытаюсь узнать информацию о формате файла, который вам нужно прочитать. - person MarkJ; 11.02.2011
comment
@MarkJ При открытии файла в блокноте отображаются все символы в рамке. будет ли это работать с символами Юникода, например арабским? - person Smith; 11.02.2011
comment
@Smith Мой код будет работать с любыми символами, но вам нужно знать кодировку символов файла, прежде чем вы сможете его прочитать (с любым кодом). Блокнот показывает коробки, жаль, тогда нет спецификации. Что произойдет, если вы откроете файл в Microsoft Word? (хорошо угадывает кодовые страницы) Откуда вы взяли файл и кто его создал? - person MarkJ; 11.02.2011
comment
@MarkJ Я прочитал текст в vb.net, используя класс потока в переменной strContents, и загрузил его в текстовое поле, текст отображается хорошо. если я открываю MSWord и Wordpad, он отображается правильно. как передать переменную объекту потока вместо текстового файла? - person Smith; 11.02.2011
comment
@smith, если ты умеешь читать текст в vb.net, значит, у тебя все получилось! В коде в моем ответе есть цикл по символам, который вычисляет частоту каждого символа. Просто возьмите этот цикл и используйте его для текста. Например. чтобы перебрать символы в строке, используйте For Each c As Char In str - person MarkJ; 11.02.2011
comment
@MarkJ: проблема в том, что некоторые символы состоят из двух отдельных символов, соединенных вместе - person Smith; 12.02.2011

Самый простой способ - сравнить с массивом всех арабских символов. http://en.wikipedia.org/wiki/Arabic_alphabet

person maadri    schedule 16.08.2011