R 초보자로서 저는 quanteda를 사용하여 특정 단어가 문장에서 다른 특정 단어 앞에 연속적으로 나타나는 경우를 찾으려고 노력하고 있습니다. 좀 더 구체적으로 말하자면, 모로코와 나이지리아 사이에 체결 된 국제 조약으로 구성된 코퍼스의 문장에서 "shall"이라는 단어 앞에 "investors"라는 단어가있는 경우를 찾고 있습니다 (텍스트는 여기에서 찾을 수 있음 : https : //edit.wti.org/app.php/document/show/bde2bcf4-e20b-4d05-a3f1-5b9eb86d3b3b ).
문제는 때때로이 두 단어 사이에 여러 단어가 있다는 것입니다. 예를 들어, 때때로 "투자자와 투자해야한다"라고 쓰여 있습니다. 이 웹 사이트에서 제공하는 유사한 솔루션을 적용하려고했습니다. (Skipgrams에 대한 컨텍스트의 키워드 (kwic)? ) 에 대한 솔루션을 시도 하고 다음 코드를 실행했을 때 :
kwic(corpus_mar_nga, phrase("investors * shall"))
"investors"와 "shall"사이에 단어가 하나 뿐인 경우 만 계산하므로 0 개의 관찰을 얻습니다.
그리고 ( `kwic` 함수를 사용하여 서로 가까운 단어를 찾을 수 있습니까? ) 다른 솔루션을 따르고 다음 코드를 실행했습니다.
toks <- tokens(corpus_mar_nga)
toks_investors <- tokens_select(toks, "investors", window = 10)
kwic(toks_investors, "shall")
나는 "shall"뒤에 "investor"가 나타날 때도 있는데,이 경우 문장의 주어가 다른 것이기 때문에 근본적으로 문맥이 바뀐다.
마지막으로 "투자자는해야한다"의 경우에 추가하여, 예를 들어 "투자자, 그들의 투자 및 주정부 당국은해야합니다"라고 읽는 경우도 얻어야합니다.하지만 위의 경우에는 할 수 없습니다. 코드.
누구든지이 문제에 대한 해결책을 제공 할 수 있습니까?
미리 감사드립니다!
좋은 질문. 다음은 말뭉치 텍스트에 대한 정규 표현식에 의존하는 두 가지 방법이고, 두 번째 방법은 .NET 용 창을 사용하여 (@Kohei_Watanabe가 주석에서 제안한대로) 사용하는 방법입니다 tokens_select()
.
먼저 샘플 텍스트를 만듭니다.
library("quanteda")
## Package version: 2.1.2
# sample text
txt <- c("The investors and their supporters shall do something.
Shall we tell the investors? Investors shall invest.
Shall someone else do something?")
검색이 문장 내에서 발생하므로 이제 이것을 문장으로 변형하십시오.
# reshape to sentences
corp <- txt %>%
corpus() %>%
corpus_reshape(to = "sentences")
방법 1은 정규식을 사용합니다. \\b
"investors"앞에 경계 ( )를 추가하고 .+
"investors"와 "shall"사이에 하나 이상의 문자를 말합니다. (이것은 개행을 포착하지 않지만 corpus_reshape(x, to = "sentences")
제거합니다.)
# method 1: regular expressions
corp$flag <- stringi::stri_detect_regex(corp, "\\binvestors.+shall",
case_insensitive = TRUE
)
print(corpus_subset(corp, flag == TRUE), -1, -1)
## Corpus consisting of 2 documents and 1 docvar.
## text1.1 :
## "The investors and their supporters shall do something."
##
## text1.2 :
## "Investors shall invest."
두 번째 방법 tokens_select()
은 비대칭 창에 적용됩니다 kwic()
. 먼저 "투자자"를 포함하는 모든 문서 (문장)를 선택하지만 이전에 토큰을 버리고 모든 토큰을 이후에 유지합니다. 이후 1000 토큰이면 충분합니다. 그런 다음 kwic()
모든 문맥 단어를 보관 하는 위치를 적용하고 첫 번째 단어가 "투자자"였으므로 정의에 따라 뒤에 있어야하는 단어에 초점을 맞 춥니 다.
# method 2: tokens_select()
toks <- tokens(corp)
tokens_select(toks, "investors", window = c(0, 1000)) %>%
kwic("shall", window = 1000)
##
## [text1.1, 5] investors and their supporters | shall | do something.
## [text1.3, 2] Investors | shall | invest.
선택은 귀하의 요구에 가장 적합한 것에 달려 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다