W języku R grep zwykle dopasowuje wektor wielu ciągów do jednego wyrażeń regularnych.R grep: Dopasuj jeden ciąg do wielu wzorców
Pytanie: Czy istnieje możliwość dopasowania pojedynczego ciągu do wielu wyrażeń regularnych? (bez przechodzenia przez każdy pojedynczy wzór regexp)?
Niektóre tła:
mam 7000+ słów kluczowych jako wskaźników dla kilku kategoriach. Nie mogę zmienić tego słownika słów kluczowych. Słownik ma następującą strukturę (słowo w Kol 1, cyfry oznaczają kategorie gdzie te słowa należą do):
ab 10 37 41
abbrach* 38
abbreche 39
abbrich* 39
abend* 37
abendessen* 60 63
aber 20 23 45
abermals 37
łącząc tak wiele słów kluczowych z „|” nie jest wykonalnym sposobem (i nie wiedziałbym, które słowo kluczowe wygenerowało trafienie). Również, po prostu odwrócenie "wzorców" i "ciągów znaków" nie działa, ponieważ wzorce mają obcinania, które nie działałyby na odwrót.
[related question, inny język programowania]
I takie jak sugestie Dana, ale z dużym zbiorem danych możesz mieć problemy z szybkością. Jeśli chcesz wyszukać coś w słowniku i zwrócić odpowiednią wartość, sugerowałbym inne podejście: dzielenie zdań na wektory pojedynczych słów za pomocą strsplit, a następnie stosowanie tabeli mieszania dla szybkiego wyszukiwania. Myślę, że możesz również podzielić słowo kluczowe i wskaźniki kategorii na dwie osobne kolumny w słowniku. Pomagałbym tam, ale dopiero po tym, jak będziesz bardziej jasne, że chcesz jako ostateczny wynik. –
Uzgodniono w sprawie restrukturyzacji danych słownikowych i użycia tabeli mieszania do wyszukiwania (w zależności od pożądanego wyniku), ale dopasowanie powinno być stosunkowo szybkie w zależności od liczby łańcuchów, nawet z dużą liczbą słów kluczowych. Dodam szybki benchmark do mojej odpowiedzi. – danpelota
Jeśli naprawdę masz dużo słów (zazwyczaj wszystkie słowa w ludzkim języku, wszystkie słowa indeksowane przez google, itp.), możesz użyć [drzewa prefiksów] (http: // en. wikipedia.org/wiki/Trie) (czasem nazywany też "trie"). Ale nie jestem świadomy żadnej implementacji w R. –