web-dev-qa-db-ja.com

Scala-Spark

これは私のデータの1つのサンプルです:

case time (especially it's purse), read manual care, follow care instructions make stays waterproof -- example, inspect rubber seals doors (especially battery/memory card door open time) 
xm "life support" picture . flip part bit flimsy guessing won't long . sound great altec speaker dock it! chance back base (xm3020) . traveling bag connect laptop extra speaker . amount paid ($25).

Dot(。)を除くすべての句読点を削除し、length < = 2を含む単語も削除したいのですが、たとえば、期待される出力は次のとおりです。

case time especially its purse read manual care follow care instructions . make stays waterproof example inspect rubber seals doors especially batterymemory card door open time
life support picture . flip part bit flimsy guessing wont long . sound great altec speaker dock chance back base xm3020 . traveling bag connect laptop extra speaker . amount paid $25 .

これはScalaで実装する必要があります、私は試しました:

replaceAll( """\\W\s""", "")
replaceAll(""""[^a-zA-Z\.]""", "")

しかし、うまく機能しません、誰かが私を助けることができますか?

7
Rozita

正規表現javadoc( http://docs.Oracle.com/javase/7/docs/api/Java/util/regex/Pattern.html )を見ると、句読点の文字クラスがわかります。は_\p{Punct}_であり、_[a-z&&[^def]]_として何かを使用して文字クラスから文字を削除できます。それ以降、ドットを除くすべての句読点を削除する正規表現を簡単に定義できます。

_s.replaceAll("""[\p{Punct}&&[^.]]""", "")
_

サイズが2未満の単語を削除するには、次のようにします。

_s.replaceAll("""\b\p{IsLetter}{1,2}\b""")
_

2つを組み合わせると、次のようになります。

_s.replaceAll("""([\p{Punct}&&[^.]]|\b\p{IsLetter}{1,2}\b)\s*""", "")
_

冗長スペースを削除するために_\s*_を追加した方法に注意してください。

また、上記の正規表現は「$」を完全に削除していることがわかります。これは、句読文字(ユニコードで定義されている)であるためです。それが望ましくない場合(期待される出力を示しているように思われる場合)、句読点と見なすものをより正確に入力してください。例として、次の文字のみを句読点と見なすことができます。?.!:()

_s.replaceAll("""([?.!:]|\b\p{IsLetter}{1,2}\b)\s*""", "")
_

または、「句読点ではない」文字リストにドットとともに「$」を追加することもできます。

_s.replaceAll("""([\p{Punct}&&[^.$]]|\b\p{IsLetter}{1,2}\b)\s*""", "")
_
23

これはどう:

replaceAll("(\\(|\\)|'|/", "")

次に、|を使用して削除する句読点を追加し、(と)のような文字を二重の円記号でエスケープしてください。

1

次のように文字列をフィルタリングしてみてください。

val example = "Hey there! It's me, myself and I."
example.filterNot(x => x == ',' || x == '!' || x == 'm')
 res3: String = Hey there It's e yself and I.
0
Duzzz

これを試してください、それはうまくいくでしょう:

val str = """
  |case time (especially it's purse), read manual care, follow care instructions make stays waterproof -- example, inspect rubber seals doors (especially battery/memory card door open time) 
  |xm "life support" picture . flip part bit flimsy guessing won't long . sound great altec speaker dock it! chance back base (xm3020) . traveling bag connect laptop extra speaker . amount paid ($25).
  """.stripMargin('|')

println(str)
val pat = """[^\w\s\.\$]"""
val pat2 = """\s\w{2}\s"""
println(str.replaceAll(pat, "").replaceAll(pat2, ""))

出力:

case time especially its purse read manual care follow care instructions make stays waterproof  example inspect rubber seals doors especially batterymemory card door open time 
life support picture . flip part bit flimsy guessing wont long . sound great altec speaker dockchance back base xm3020 . traveling bag connect laptop extra speaker . amount paid $25.
0
tuxdna