Как преобразовать алфавиты в числовые значения с пробелами и вернуть их обратно в алфавиты? - PullRequest
0 голосов
/ 29 мая 2019

Хотите преобразовать алфавит в числовые значения и преобразовать его обратно в алфавиты, используя некоторые математические методы, такие как быстрое преобразование Фурье в MATLAB.

Пример:
Ниже приведен текст, сохраненный в "text2figure.txt"file

Hi how r u am fine take care of your health 
thank u very much
am 2.0

Чтение в MATLAB:

data=fopen('text2figure.txt','r')
d=fscanf(data,'%s')
temp = fileread( 'text2figure.txt' ) 
temp = regexprep( temp, ' {6}', '   NaN' ) 
c=cellstr(temp(:))'

Теперь я хочу преобразовать массив ячеек с пробелами в числовые значения / целые числа:

coding = 'abcdefghijklmnñopqrstuvwxyz .,;'
str = temp %// example text
[~, result] = ismember(str, coding)
y=result


result =

  Columns 1 through 18

     0     9    28     8    16    24    28    19    28    22    28     1    13    28     6     9    14     5

  Columns 19 through 36

    28    21     1    11     5    28     3     1    19     5    28    16     6    28    26    16    22    19

  Columns 37 through 54

    28     8     5     1    12    21     8    28     0     0    21     8     1    14    11    28    22    28

  Columns 55 through 71

    23     5    19    26    28    13    22     3     8     0     0     1    13    28     0    29     0

Теперь я хочу преобразовать числовые значения обратно в алфавиты:

Hi how r u am fine take care of your health 
thank u very much
am 2.0

Как написать код MATLAB для возврата числовых значений в переменной result в алфавиты?

1 Ответ

1 голос
/ 01 июня 2019

Большая часть кода в вопросе не имеет никаких полезных эффектов.Эти три строки ведут к result:

str = fileread('test2figure.txt');
coding = 'abcdefghijklmnñopqrstuvwxyz .,;';
[~, result] = ismember(str, coding);

ismember возвращает во втором выходном аргументе индексы в coding для каждого элемента str.Таким образом, result - это индексы, которые мы можем использовать для индексации в coding:

out = coding(result);

Однако это не работает, поскольку некоторые элементы str не встречаются в coding, а дляэти элементы ismember возвращают 0, что не является допустимым индексом.Мы можем заменить нули новым символом:

coding = ['*',coding];
out = coding(result+1);

По сути, мы сдвигаем каждый код на единицу, добавляя новый код для 1.

Один из символов, который мы находимсяздесь отсутствует символ перевода строки.Таким образом, три линии стали одной линией.Вы можете добавить код для символа новой строки, добавив его в таблицу coding:

str = fileread('test2figure.txt');
coding = ['abcdefghijklmnñopqrstuvwxyz .,;',char(10)]; % char(10) is the newline character
[~, result] = ismember(str, coding);

coding = ['*',coding];
out = coding(result+1);

Всего этого проще достичь, просто используя таблицу кодов ASCII:

str = fileread('test2figure.txt');
result = double(str);

out = char(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...