Mathematica - исключить строку из поиска строки - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь выбрать наиболее часто встречающиеся ключевые слова в таблице. Мне нужно найти количество вхождений слова в список, который НЕ включает данное второе, третье, четвертое и т. Д. Слово.

Например, мне нужно найти, сколько раз слово «lollypop» появляется в списке, в котором нет слова «конфеты».

Этот код будет возвращать количество раз, когда слово "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", в основном.

Ответы [ 2 ]

2 голосов
/ 07 июля 2011
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
*)
2 голосов
/ 07 июля 2011

Чтобы получить слова, попробуйте, например,

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 для этого списка.

Но я смущен вашими комментариями ("Этот код возвращает предварительный выбор списков, по которым я выполняю другие поиски, поэтому мне нужнооставьте список в целости и сохранности "какой список? все они сохраняются в целости с помощью приведенного выше кода), поэтому я все равно должен что-то упустить.

...