quanteda를 사용하여 문장에서 특정 단어보다 먼저 특정 단어가 나타나는 경우를 찾는 방법

아무도

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"가 나타날 때도 있는데,이 경우 문장의 주어가 다른 것이기 때문에 근본적으로 문맥이 바뀐다.

마지막으로 "투자자는해야한다"의 경우에 추가하여, 예를 들어 "투자자, 그들의 투자 및 주정부 당국은해야합니다"라고 읽는 경우도 얻어야합니다.하지만 위의 경우에는 할 수 없습니다. 코드.

누구든지이 문제에 대한 해결책을 제공 할 수 있습니까?

미리 감사드립니다!

Ken Benoit

좋은 질문. 다음은 말뭉치 텍스트에 대한 정규 표현식에 의존하는 두 가지 방법이고, 두 번째 방법은 .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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관