我正在尝试选择桌面上最常出现的关键词。 我需要搜索列表中不包含给定的第二,第三,第四等单词的单词出现次数。
例如,我需要搜索单词“lollypop”出现在不包含单词“candy”的列表中的次数。
此代码将返回单词“lollypop”出现的次数:
rt = Parallelize@
Cases[MemoizeTable["Candy_table.txt"],
x_List /;
MemberQ[x,
s_String /;
StringMatchQ[s, ("*lollypop*"), IgnoreCase -> True]], {1}];
我尝试添加StringFreeQ
以排除“糖果”,我尝试添加Nor
,其中一个人会在字符串搜索中添加Or
,但我不知道该怎么做/把它/它们放在哪里..?
基本上我需要一个"this" BUT NOT "that"
代码。
答案 0 :(得分:2)
要获得单词,请尝试例如
dl = DictionaryLookup[];
Select[dl,
StringFreeQ[#, ___ ~~ "ies" ~~ ___] &&
StringMatchQ[#, ___ ~~ "loll" ~~ ___] &]
(*
-> {"loll", "lolled", "lolling", "lollipop", "lollipops", "lollop", "lolloped", "lolloping", "lollops", "lolls", "lolly"}
*)
你可以通过在最后添加//Count
来计算它们(比如说)。
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]
排除“盘子”,因此给这个列表1。
但我对你的评论感到困惑(“这段代码正在返回我正在运行其他搜索的列表的初步选择,所以我需要保持列表完好无损”哪个列表?它们都保持完好无损上面的代码)所以我仍然必须遗漏一些东西。
答案 1 :(得分:2)
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
*)