Generating a Dictionary Function

6 ビュー (過去 30 日間)
Smoxk x
Smoxk x 2022 年 4 月 26 日
コメント済み: Walter Roberson 2022 年 4 月 27 日
Hi All,
How would i make a function called 'Word' that determines whether the user has input a real english word, determined based on the content within a file called 'dictionary.txt', which contains the whole english dictionary.
For example, a worked example from the users perspective would be as follows:
What is the word? 'kinbecef'
Not a word. Try Again.
What is the word? 'Community'
... (continue on with code)
Kind Regards,
Smoxk x
  7 件のコメント
Walter Roberson
Walter Roberson 2022 年 4 月 26 日
while ~strcmpi(Inputword, import)
%get a new word
end
Jan
Jan 2022 年 4 月 26 日
@Smoxk x: Your code has several problems.
  • Do not use "size" as a name of a variable, because it is an important Matlab function. This can cuase unexpected behavior, if you try to use the function later.
  • "Num" is not defined.
  • "InputWord" is uded, before it is defined.
  • "file(i)" is the i.th character of the file name.
  • ~= compares char vectors elementwise, so both must have the same length or one can be a scalar.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2022 年 4 月 26 日
strcmpi() perhaps. However that depends how much intelligence you need to put into it. You give an input example with a leading capital: is the search to be case-insensitive or do you have capitalization rules (the rules in English are more complicated than just "capitalize the first letter")? Do you need to deduce the plurals from the base words, including for example goose vs geese but moose does not imply meese?
  6 件のコメント
Smoxk x
Smoxk x 2022 年 4 月 27 日
@Jan, ok thanks so much!
Walter Roberson
Walter Roberson 2022 年 4 月 27 日
Sorry about that... the function is often named tolower() in other programming languages.

サインインしてコメントする。

その他の回答 (2 件)

Jan
Jan 2022 年 4 月 26 日
function Word
Data = fileread('YourDictionary.txt');
List = sort(lower(strsplit(Data, char(10))));
while 1
s = input('Input a word: ', 's');
% insert the checks and the oputput here...
% Stop the loop with "break;" if s is empty
end
end

Bruno Luong
Bruno Luong 2022 年 4 月 27 日
編集済み: Bruno Luong 2022 年 4 月 27 日
You can use container.Map. I give here example of numbers, but it can handle char array or strings as well.
The time access, using hash is O(1) and is much quicker than ismember (and this test on TMW server seems to invalid Walter's claim that ismember on sorted array is faster, perhaps because MATLAB ismember doesn't know/check array is sorted, and it sorts anyway and we all know some sorting algorithms are not fast when working on already sorted input):
a=randi(1e6,1,1e6);
as=sort(a);
m=containers.Map(a,a);
b=randi(1e6,1,1e3);
tic; for k=1:numel(b); ismember(b(k),as); end; toc
Elapsed time is 0.712036 seconds.
tic; for k=1:numel(b); ismember(b(k),a); end; toc
Elapsed time is 0.596029 seconds.
tic; for k=1:numel(b); isKey(m,b(k)); end; toc
Elapsed time is 0.005366 seconds.

カテゴリ

Help Center および File ExchangeDictionaries についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by