Karl Broman の投稿: https://kbroman.wordpress.com/2015/06/22/randomized-hobbit-2/は、楽しみのためだけに正規表現と ngram をいじることになりました。正規表現を使用して 2 グラムを抽出しようとしました。これを行うためのパーサーがあることは知っていますが、正規表現ロジックに興味があります (つまり、私が満たすことができなかったのは自己課題でした)。
以下に、最小限の例と目的の出力を示します。私の試みの問題は2つあります:
グラム (単語) が消費され、次のパスで使用できなくなります。 2 番目のパスでそれらを使用できるようにするにはどうすればよいですか? (例: で以前に消費された後に
like
利用できるようにしたい)like toast
I like
単語間のスペースを非キャプチャにすることはできませんでした ( を使用したにもかかわらず、出力の末尾の空白に注意して
(?:\\s*)
ください)。 n 番目 (この場合は 2 番目) の単語の末尾のスペースをキャプチャしないようにするにはどうすればよいですか? これは簡単に実行できることを知っています:"(\\b[A-Za-z']+\\s)(\\b[A-Za-z']+)"
2グラムの場合ですが、ソリューションをnグラムに拡張したいと思います。PS私は知って\\w
いますが、アンダースコアと数字を単語の一部とは見なしませんが'
、単語の一部と見なします。
MWE:
library(stringi)
x <- "I like toast and jam."
stringi::stri_extract_all_regex(
x,
pattern = "((\\b[A-Za-z']+\\b)(?:\\s*)){2}"
)
## [[1]]
## [1] "I like " "toast and "
望ましい出力:
## [[1]]
## [1] "I like" "like toast" "toast and" "and jam"