我正在尝试从一组单词中提取bi-gram并将它们存储在矩阵中。我想要的是在第一个原始词和与该词相关的所有二维词中插入单词
例如:如果我有以下字符串'数据库文件那里'我的输出应该是:
database file there
da fi th
at il he
ta le er
ab re
..
我试过这个但它只给了我没有原始单词的二元组
collection = fileread('e:\m.txt');
collection = regexprep(collection,'<.*?>','');
collection = lower(collection);
collection = regexprep(collection,'\W',' ');
collection = strtrim(regexprep(collection,'\s*',' '));
temp = regexprep(collection,' ',''',''');
eval(['words = {''',temp,'''};']);
word = char(words(1));
word2 = regexp(word, sprintf('\\w{1,%d}', 1), 'match');
bi = cellfun(@(x,y) [x '' y], word2(1:end-1)', word2(2:end)','un',0);
这仅适用于第一个单词,但我想对“单词”矩阵中的每个单词执行此操作1X1000
有没有一种有效的方法来实现这一点,因为我将处理大约100万字?
我是Matlab的新手,如果有任何资源可以解释如何处理矩阵(更新元素,删除,......)会有所帮助
的问候, 阿什拉夫
答案 0 :(得分:1)
如果您希望将单元格数组作为输出,这可能对您有用 -
input_str = 'database file there' %// input
str1_split = regexp(input_str,'\s','Split'); %// split words into cells
NW = numel(str1_split); %// number of words
char_arr1 = char(str1_split'); %//' convert split cells into a char array
ind1 = bsxfun(@plus,[1:NW*2]',[0:size(char_arr1,2)-2]*NW); %//' get indices
%// to be used for indexing into char array
t1 = reshape(char_arr1(ind1),NW,2,[]);
t2 = reshape(permute(t1,[2 1 3]),2,[])'; %//' char array with rows for each pair
out = reshape(mat2cell(t2,ones(1,size(t2,1)),2),NW,[])'; %//'
out(reshape(any(t2==' ',2),NW,[])')={''}; %//' Use only paired-elements cells
out = [str1_split ; out] %// output
代码输出 -
input_str =
database file there
out =
'database' 'file' 'there'
'da' 'fi' 'th'
'at' 'il' 'he'
'ta' 'le' 'er'
'ab' '' 're'
'ba' '' ''
'as' '' ''
'se' '' ''