我正在尝试选择表格中出现频率最高的关键字。我需要搜索列表中不包括给定的第二个、第三个、第四个等单词的单词的出现次数。
例如,我需要搜索单词"lollypop“在不包括单词"candy”的列表中出现的次数。
这段代码将返回单词"lollypop“出现的次数:
rt = Parallelize@
Cases[MemoizeTable["Candy_table.txt"],
x_List /;
MemberQ[x,
s_String /;
StringMatchQ[s, ("*lollypop*"), IgnoreCase -> True]], {1}];我试着添加StringFreeQ来排除“StringFreeQ”,我试着添加Nor,在字符串搜索中添加Or,但是我不确定怎么做/放在哪里/它们..?
基本上,我需要一个"this" BUT NOT "that"代码。
发布于 2011-07-07 06:19:43
excludeList = {"candy", "other"};
toCount = "lollypop";
numberOfToCount[list_, tocount_, excludeList_] :=
If[And @@ ((! MemberQ[list, #]) & /@ excludeList),
Count[list, tocount],
"Excluded"];用法:
numberOfToCount[{"lollypop", "lollypop", "the beatles"}, toCount, excludeList]
numberOfToCount[{"lollypop", "lollypop", "candy"}, toCount, excludeList]
(*
-> 2
-> Excluded
*)发布于 2011-07-07 06:11:34
要获取单词,请尝试例如
dl = DictionaryLookup[];
Select[dl,
StringFreeQ[#, ___ ~~ "ies" ~~ ___] &&
StringMatchQ[#, ___ ~~ "loll" ~~ ___] &]
(*
-> {"loll", "lolled", "lolling", "lollipop", "lollipops", "lollop", "lolloped", "lolloping", "lollops", "lolls", "lolly"}
*)您可以通过在末尾添加//Count来计算它们(比如)。
编辑:似乎我误解了你的问题。如果您要问的是:计算"canapes“在列表中出现的次数,该列表不包括”可修改“,那么:
dl2 = {"titivation", "curving", "doppelgangers", "objurgations",
"canapes", "invaluable", "modifiable", "dissect", "ominousness",
"sentinel"}
If[Not@MemberQ[dl2, "modifiable"], Count[dl2, "canapes"], False]
(*
-> False
*)而
If[Not@MemberQ[dl2, "plate"], Count[dl2, "canapes"], False]不包括"plate",因此此列表的值为1。
但是我被你的评论弄糊涂了(“这段代码返回的是我正在运行其他搜索的列表的初步选择,所以我需要保持列表的完整性”哪个列表?它们都被上面的代码原封不动地保存着),所以我肯定还是遗漏了什么。
https://stackoverflow.com/questions/6603601
复制相似问题