+ JavaScript の質問用スレッド vol.141 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
■前スレ
+ JavaScript の質問用スレッド vol.140 +
https://mevius.5ch.net/test/read.cgi/hp/1558249632/ 配列は、キーを数値だけに限定したもの
Object を、連想配列・辞書のように使うと、__proto__ というキーでバグるから、要注意!
Haxe では、キーの前に、@ を連結してた
キーがabc なら、@abc にする。
__proto__ なら、@__proto__ になるのでバグらない
ES2015 以降なら、Map を使えばよい Mapにreduceやfilterがないのはなぜ?
配列にしては低機能過ぎでは? http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/15-4_Array_Objects.html
new MapはES3のArrayにも及ばないんじゃないかな
sort,slice,unshift,concat...etc
配列としては足りない機能がかなりある >>947 です。
配列用のカッコでも行けるけど使わない方がよいのですね。
forのiと連動させつつ、歯抜けでpushして配列使えたらよいなと
試してみたところでして。
普通にオブジェクトか配列きちんと埋めて使います。
ありがとうございました >>954
JSの場合後戻りできないので慎重になっているだけ
議論はちゃんと進んでいる const str = `abc
123`
const lines = str.split( "\n" ); // 配列
console.log( lines ) //=> [ 'abc', '123' ]
1行ずつ処理するのに、上のように、split を使って、一旦配列に入れたのですが、
下のRuby みたいに、配列に入れずに、そのまま1行ずつ処理できますか?
str = <<"EOT"
abc
123
EOT
str.each_line do |line|
line.chomp! # 末尾の改行を削除する
p line
end
出力
"abc"
"123" str.split('\n').forEach(line => console.log(line))
str.replace(/.+/gm, line => console.log(line)) >>962
> str.replace(/.+/gm, line => console.log(line))
"." を使うなら、mフラグが不要では? ちょっと見ない間に定数宣言もできるようになったんか >>964
空行も処理するのは、
console.log(str.replace(/^.*$/gm, line => line + ' peropero'))
または、
for (const line of /^.*$/gm) console.log(line + ' peropero') 質問です
let str1 = '庭には二羽鶏がいるオムライス食べたい2日目';
let str2 = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ';
このstr2のテキストから
str1の中の平仮名以外の文字の読み仮名に該当する部分を取り出したくて試行錯誤してます
str1を平仮名とそれ以外に割って
['庭','には','二羽鶏','がいる','オムライス食','べたい','2日目']
str2の先頭から、配列2つ目の「には」が出てくるまでが
配列1つ目の「庭」の読み仮名だ!
という方針でやってみて、上記の例だとうまくいくんですが
indexOfの引数になる平仮名が漢字の読みに含まれてしまうと失敗します
let str1 = '煮蛤には焼酎よりも日本酒';
let str2 = 'にはまぐりにはしょうちゅうよりもにほんしゅ';
これだと、配列2つ目の「には」が、読み仮名となる「にはまぐり」に含まれてしまうので
どうも方針が間違ってる気がしているのですが
なにかうまいやり方はありますでしょうか >>967,968
お前大丈夫か?
被害妄想も大概にしろ
いつ誰が>>965がおかしいと言った? >>975
「知ったか」と「無知」にレスアンカーを付けないで、なぜ通じると思ったんだ? >>972
単純に、漢字とその読み仮名を定義すれば?
"赤色" : [ "あかいろ", "せきしょく" ]
プログラム板のアルゴリズムとか、日本語解析などのスレで聞けば? >972
漢字部分を.+に置き換えた正規表現でひとつのマッチは
得られると思う。
ただ、受理できる全パターンの列挙とその中から
正解を選び出す手段は別に必要かな。 >>972
漢字と平仮名の対応表なしに正解を導き出すのは不可能
庭にわ二羽庭
にわにわにわにわ
プロクラムには、各々の漢字の「にわ」と「にわにわ」を区別出来ない
全パターンを掲示して、人間に正解を選んで貰うのが次善解 >>977-979
あざます
やっぱ無理ですかねー
なんかこう、確実に一致する平仮名は含まれているので
うまーくマスキング出来ないかなーとか思って始めてみたんですが 考えないで脳死回答すると後ろからみていきゃいいんじゃね >>983
あざます
形態素解析は>>972よりも先に思いついて、まず品詞で割ってみたんですが
平仮名化の精度が微妙だったんでですよね…
このアプローチも頑張ってみます >>983
いろいろゴニョゴニョしたんですが
最初は茶筅の形態素解析を使って失敗していたんですが
gooラボの形態素解析APIは品詞分解した結果に読み仮名が付いていました!
これでかなり精度上がりました
ありがとうございました! >>981
おもしろそうなのでちょっとやってみた。
const kanafuri = (漢字かな混じり文, かな文) => {
const matches = [...漢字かな混じり文.matchAll(/(?<ひらがな>\p{Script=Hiragana}+)|(?<ひらがな以外>[\P{Script=Hiragana}]+)/gu)]
const 行頭の文字種 = matches[0].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const 行末の文字種 = matches[matches.length - 1].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const ひらがなchunks = matches.filter(({groups: {ひらがな}}) => ひらがな).map(([match]) => match)
const [_, ...よみがなchunks] = RegExp((行頭の文字種 === 'ひらがな以外' ? '(.+)' : '') + ひらがなchunks.join`(.+)` + (行末の文字種 === 'ひらがな以外' ? '(.+)' : ''), 'gu').exec(かな文)
result = ''
for (const {groups: {ひらがな, ひらがな以外}} of matches) {
if (ひらがな) {
// ひらがなのときの処理
result += ひらがな
} else {
// ひらがな以外のときの処理
result += ひらがな以外 + '【' + よみがなchunks.shift() + '】'
}
}
return result
} >>987
const str1_漢字 = '庭には二羽鶏がいるオムライス食べたい2日目'
const str1_かな = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ'
const str2_漢字 = '煮蛤には焼酎よりも日本酒'
const str2_かな = 'にはまぐりにはしょうちゅうよりもにほんしゅ'
const str3_漢字 = 'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、' + //5ch制限のため改行
'うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。'
const str3_かな = 'あのいーはとーゔぉのすきとおったかぜ、なつでもにわにつめたさをもつあおいそら、' + //5ch制限のため改行
'うつくしいもりでかざられたもりーおし、こうがいのぎらぎらひかるくさのなみ。'
console.log(kanafuri(str1_漢字, str1_かな))
//=> 庭【にわ】には二羽鶏【にわにわとり】がいるオムライス食【おむらいすた】べたい2日目【ふつかめ】
console.log(kanafuri(str2_漢字, str2_かな))
//=> 煮蛤【にはまぐり】には焼酎【しょうちゅう】よりも日本酒【にほんしゅ】
console.log(kanafuri(str3_漢字, str3_かな))
//=> あのイーハトーヴォ【いーはとーゔぉ】のすきとおった風、夏【かぜ、なつ】でも底【にわ】に冷【つめ】たさをもつ青【あお】いそら、【、】
//5ch制限のため改行
うつくしい森【もり】で飾【かざ】られたモリーオ市、郊外【もりーおし、こうがい】のぎらぎらひかる草【くさ】の波。【なみ。】
、や。の扱いが不服だが疲れたのでここまでにする。
参考:
Unicode property escapes
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes
Unicodeの文字プロパティを指定した正規表現をみてみる(ECMAScript2018)
https://blog.tes.co.jp/entry/2018/06/29/145450 アホみたいにズラズラ書かずにコード投稿サイトに書いてくれ
>>1にも書いてあるだろ
しかもJaneだとインデントもされないし読みにくいことこの上ない イーハトーヴォのかな文、誤字ったぜ…
底をにわって書いちゃったんだぜ。
例文1でにわにわうるさいから… インデントが無くなっても、VSCode のフォーマットの拡張機能で、自動的にインデントされるだろ? 5ちゃんに長々と書かれてるコードをいちいちエディタにペーストしないわ つまり5ちゃんに長々と書くことによって、みんながコードをいちいちエディタにペーストする手間を省いたわけだ。親切! >>999
形態素解析APIで解決したって言ってんだろうがマヌケ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 22時間 54分 33秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。